Иногда 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)
для меня. Когда тип я изменяется, например, от int
до double
, код будет оставаться верным.
new Integer(i).toString();
Этот оператор создает объект Integer, а затем вызывает его методы toString(i)
до возвращает представление String значения Integer.
Integer.toString(i);
Он возвращает объект String, представляющий конкретный int (integer), но здесь toString(int)
- это метод static
.
Резюме в первом случае возвращает строковое представление объектов, где, как и во втором случае, оно возвращает строковое представление целого числа.
Я также настоятельно рекомендую использовать
int integer = 42;
String string = integer + "";
Простой и эффективный.
Хотя мне нравится fhucho рекомендация
String.valueOf(i)
Ирония заключается в том, что этот метод фактически вызывает
Integer.toString(i)
Таким образом, используйте String.valueOf(i)
, если вам нравится, как он читает, и вам не нужен radix, но также зная, что он менее эффективен, чем Integer.toString(i)
.
Что касается измерения производительности, если вы рассматриваете производительность по времени, то Integer.toString(i); стоит дорого, если вы звоните менее 100 миллионов раз. Если это более 100 миллионов вызовов, то новый Integer (10).toString() будет работать лучше.
Ниже код через u может попытаться измерить производительность,
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));
}
В терминах памяти
new Integer (i).toString();
будет занимать больше памяти, так как каждый раз будет создавать объект, поэтому произойдет фрагментация памяти.
лучше:
Integer.valueOf(i).toString()
Простой способ состоит только в конкатенации ""
с целым числом:
Int i = 100;
String s = ""+ i;
теперь s
будет иметь "100"
как строковое значение.
Здесь
Integer.toString
вызывает статический метод в классе Integer. Он не требует вызова объекта.
Если вы вызываете new Integer(i)
, сначала создаете экземпляр типа Integer, который представляет собой полный объект Java, инкапсулирующий значение вашего int i. Затем вы вызываете метод toString
на нем, чтобы попросить его вернуть строковое представление самого себя.
1. Integer.toString(i)
Integer i = new Integer(8);
// returns a string representation of the specified integer with radix 8
String retval = i.toString(516, 8);
System.out.println("Value = " + retval);
2. new Integer(i).toString()
int i = 506;
String str = new Integer(i).toString();
System.out.println(str + " : " + new Integer(i).toString().getClass());////506 : class java.lang.String