Java int to String-целое число.toString(i) vs новое целое число (i).метод toString()

иногда java озадачивает меня.
У меня огромное количество int инициализации, чтобы сделать.

что это реальные разница?

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

11 ответов


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

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

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

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


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

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


другой вариант-статический!--6-->String.valueOf метод.

String.valueOf(i)

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


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

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

  2. Integer.toString(i);

    это возвращает строковый объект, представляющий определенный 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).


С точки зрения измерения производительности, если вы рассматриваете время, то целое число.toString (i); дорого, если вы звоните менее 100 миллионов раз. Еще тогда более 100 миллионов называет новое целое(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));
    }

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

новый Целое число (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