Иногда java меня озадачивает.
Мне нужно выполнить огромное количество инициализаций int.
В чем реальная разница?
Integer.toString(i)
new Integer(i).toString()
Иногда java меня озадачивает.
Мне нужно выполнить огромное количество инициализаций int.
В чем реальная разница?
Integer.toString(i)
new Integer(i).toString()
Integer.toString
вызывает статический метод в классе Integer
. Экземпляр Integer
не требуется.
Если вы позвоните new Integer(i)
вы создаете экземпляр типа Integer
, который представляет собой полный объект Java, инкапсулирующий значение вашего int. Затем вы вызываете для него метод toString
, чтобы попросить его вернуть строковое представление самого.
Если все, что вам нужно, это напечатать int
, вы должны использовать первый, потому что он легче, быстрее и не требует дополнительной памяти (кроме возвращаемой строки).
Если вам нужен объект, представляющий целочисленное значение - например, чтобы поместить его в коллекцию - вы должны использовать второй, поскольку он дает вам полноценный объект для выполнения всех видов вещей, которые вы не можете сделать с голым int
.
new Integer(i).toString()
сначала создает (избыточный) объект-оболочку вокруг i
(который сам может быть объектом-оболочкой Integer
).
Integer.toString(i)
предпочтительнее, потому что он не создает ненужных объектов.
Другой вариант - статический метод String.valueOf
.
String.valueOf(i)
Мне он кажется немного более подходящим, чем Integer.toString(i)
. При изменении типа i, например с int
на double
, код останется правильным.
new Integer(i).toString();
Этот оператор создает объект Integer, а затем вызывает его методы toString(i)
, чтобы вернуть строковое представление значения Integer.
Integer.toString(i);
Он возвращает объект String, представляющий конкретное целое число (int), но здесь toString(int)
- это метод static
.
Сводка в первом случае возвращает строковое представление объектов, а, как и во втором случае, возвращает строковое представление целого числа.
Я также очень рекомендую использовать
int integer = 42;
String string = integer + "";
Просто и эффективно.
Integer.toString()
, могут потребовать дополнительных нажатий клавиш, но они намного яснее, что очень важно, если вы хотите сохранить код.
- person Calvin Li; 03.03.2015
toString()
целочисленной переменной?
- person Ankit Deshpande; 06.10.2015
Хотя мне нравится рекомендация fhucho
String.valueOf(i)
Ирония заключается в том, что этот метод на самом деле вызывает
Integer.toString(i)
Таким образом, используйте String.valueOf(i)
, если вам нравится, как он читается, и вам не нужен radix, но вы также знаете, что он менее эффективен, чем Integer.toString(i)
.
С точки зрения измерения производительности, если вы учитываете временную производительность, то Integer.toString (i); стоит дорого, если вы звоните менее 100 миллионов раз. В противном случае, если это более 100 миллионов вызовов, то new Integer (10) .toString () будет работать лучше.
Ниже приведен код, через который вы можете попытаться измерить производительность,
public static void main(String args[]) {
int MAX_ITERATION = 10000000;
long starttime = System.currentTimeMillis();
for (int i = 0; i < MAX_ITERATION; ++i) {
String s = Integer.toString(10);
}
long endtime = System.currentTimeMillis();
System.out.println("diff1: " + (endtime-starttime));
starttime = System.currentTimeMillis();
for (int i = 0; i < MAX_ITERATION; ++i) {
String s1 = new Integer(10).toString();
}
endtime = System.currentTimeMillis();
System.out.println("diff2: " + (endtime-starttime));
}
Что касается памяти,
новое целое число (i) .toString ();
займет больше памяти, поскольку он будет создавать объект каждый раз, поэтому фрагментация памяти будет происходить.
new Integer(10).toString() can be simplified to Integer.toString(10)
- person oksayt; 15.10.2010
Лучше:
Integer.valueOf(i).toString()
Простой способ - просто объединить ""
с целым числом:
int i = 100;
String s = "" + i;
теперь s
будет иметь 100
как строковое значение.
Здесь Integer.toString
вызывает статический метод класса Integer. Он не требует вызова объекта.
Если вы вызываете new Integer(i)
, вы сначала создаете экземпляр типа Integer, который представляет собой полный объект Java, инкапсулирующий значение вашего int i. Затем вы вызываете для него метод toString
, чтобы попросить его вернуть строковое представление самого себя.
"" + 42
, но это я. Форма № 2 приведет к созданию нового целочисленного объекта (для большинства значений i) в качестве промежуточного. Это также больше печатает. - person   schedule 14.10.2010"" + 42
ничуть не лучше, так как он требует промежуточногоStringBuilder
, который намного тяжелее, чемInteger
. - person Joachim Sauer   schedule 14.10.2010"" + 42
, потому что в случае добавления строк целых чисел вы можете добавить значения, не осознавая этого. - person BoltzmannBrain   schedule 03.04.2015String.valueOf()
, потому что его можно использовать для любого типа. - person shmosel   schedule 02.08.2016