Иногда ява озадачивает меня. У меня есть огромное количество инициализаций int .
Какая разница?
Integer.toString (i)
new Integer (i) .toString ()
Integer.toString
вызывает статический метод в классе Integer
. Не нужен экземпляр Integer
.
Если вы вызываете new Integer (i)
, вы создаете экземпляр типа Integer
, который представляет собой полный объект Java, инкапсулирующий значение вашего int. Затем вы вызываете метод toString
, чтобы попросить его вернуть строковое представление itelf .
Если все, что вы хотите, это напечатать 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 (integer) , но здесь toString (int)
является статическим
методом.
Сводка в первом случае возвращает представление строки объектов, где, как и во втором случае, возвращает строковое представление целого числа.
Я также настоятельно рекомендую использовать
int integer = 42;
String string = integer + "";
Просто и эффективно.
Хотя мне нравится рекомендация Фучо
String.valueOf(i)
Ирония в том, что этот метод действительно вызывает
Integer.toString(i)
Таким образом, используйте String.valueOf (i)
, если вам нравится, как он читается, и вам не нужен радикс, но также знайте, что он менее эффективен, чем Integer.toString (i)
.
С точки зрения измерения производительности, если вы рассматриваете временную производительность, то Integer.toString (i); стоит дорого, если вы звоните менее 100 миллионов раз. Иначе, если это более 100 миллионов вызовов, тогда новый 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));
}
С точки зрения памяти,
новый Integer (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