Java int to String - Integer.toString (i) против нового Integer (i) .toString () - PullRequest
419 голосов
/ 14 октября 2010

Иногда ява озадачивает меня.
У меня огромное количество инициализаций int .

Что такое реальная разница?

  1. Integer.toString(i)
  2. new Integer(i).toString()

Ответы [ 11 ]

542 голосов
/ 14 октября 2010

Integer.toString вызывает статический метод в классе Integer. Ему не нужен экземпляр Integer.

Если вы вызываете new Integer(i), вы создаете экземпляр типа Integer, который является полным Java-объектом, инкапсулирующим значение вашего int. Затем вы вызываете для него метод toString, чтобы попросить его вернуть строковое представление самого .

Если все, что вам нужно, это напечатать int, вы бы использовали первый, потому что он легче, быстрее и не использует дополнительную память (кроме возвращаемой строки).

Если вы хотите, чтобы объект, представляющий целочисленное значение - например, для помещения его в коллекцию, - вы бы использовали второй, поскольку он дает вам полноценный объект для выполнения всех видов вещей, с которыми вы не можете делать голый int.

95 голосов
/ 14 октября 2010

new Integer(i).toString() сначала создает (избыточный) объект оболочки вокруг i (который сам может быть объектом оболочки Integer).

Integer.toString(i) предпочтительнее, поскольку не создает ненужных объектов.

42 голосов
/ 16 ноября 2014

Другим вариантом является статический метод String.valueOf.

String.valueOf(i)

Это кажется немного более правильным, чем Integer.toString(i) для меня. Когда тип i изменится, например, с int на double, код останется верным.

14 голосов
/ 14 октября 2010
  1. new Integer(i).toString();

    Этот оператор создает объект Integer и затем вызывает его методы toString(i) to , возвращающие строковое представление значения Integer .

  2. Integer.toString(i);

    Он возвращает объект String, представляющий конкретное целое (целое число) , но здесь toString(int) - это метод static.

Сводка в первом случае возвращает строковое представление объектов, а во втором случае возвращает строковое представление целого числа.

13 голосов
/ 06 сентября 2013

Я также настоятельно рекомендую использовать

int integer = 42;
String string = integer + "";

Просто и эффективно.

11 голосов
/ 07 ноября 2015

Хотя мне нравится рекомендация Фхучо о

String.valueOf(i)

Ирония в том, что этот метод на самом деле вызывает

Integer.toString(i)

Таким образом, используйте String.valueOf(i), если вам нравится, как оно читается, и вам не нужен radix, но вы также знаете, что он менее эффективен, чем Integer.toString(i).

4 голосов
/ 14 октября 2010

Что касается измерения производительности, если вы рассматриваете производительность по времени, то 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));
    }

С точки зрения памяти,

new Integer (i) .toString ();

будет занимать больше памяти, поскольку каждый раз при создании объекта будет происходить фрагментация памяти.

2 голосов
/ 17 августа 2016

Простой способ - просто объединить "" с целым числом:

int i = 100;

String s = "" + i;

Теперь s будет иметь 100 в качестве строкового значения.

2 голосов
/ 25 августа 2014

Лучше:

Integer.valueOf(i).toString()
1 голос
/ 14 августа 2015

Здесь Integer.toString вызывает статический метод в классе Integer.Для этого не требуется, чтобы объект вызывал.

Если вы вызываете new Integer(i), вы сначала создаете экземпляр типа Integer, который является полным объектом Java, инкапсулирующим значение вашего int i.Затем вы вызываете метод toString, чтобы попросить его вернуть строковое представление самого себя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...