Преобразование int в строку считается автобоксом?

AFAIK Когда Java автоматически преобразует тип примитива в объект класса-оболочки, чем его вызываемый autoboxing, потому что примитив упакован в класс-оболочку.

Так и есть

int test = 3;
String str = String.valueOf(test);

считается автобоксом?

Причина спросить?

Я недавно сталкивался с этим вопросом. Причина, по которой я думаю, это автобокс, который был введен в Java 5(нет в Java 4).

6 ответов

Решение

Автобокс распространяется только на примитивы -> обертки. Поскольку нет строкового примитива (или оболочки), String не имеет ничего общего с автобоксом.

Автобоксы только при наличии "несоответствия импеданса" между ссылочными типами и примитивами

No.

Если мы посмотрим на исходный код valueOf метод с int пары

 public static String More ...valueOf(int i) {
      return Integer.toString(i, 10);
 }

вызов ToString на Integer wrapper

Создание новой строки в оболочке Integer toString()

  public static String More ...toString(int i, int radix) {

       if (radix < Character.MIN_RADIX || radix > Character.MAX_RADIX)
            radix = 10;

       /* Use the faster version */
         if (radix == 10) {
            return toString(i);
        }

       char buf[] = new char[33];
       boolean negative = (i < 0);
      int charPos = 32;

       if (!negative) {
            i = -i;
        }

        while (i <= -radix) {
            buf[charPos--] = digits[-(i % radix)];
           i = i / radix;
         }
        buf[charPos] = digits[-i];
        if (negative) {
             buf[--charPos] = '-';
        }

         return new String(buf, charPos, (33 - charPos));
     }

Согласно http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html autoboxing - это автоматическое преобразование, которое компилятор Java делает между примитивными типами и их соответствующими классами обертки объектов, String не является оберткой объектов учебный класс.

Автобокс - это автоматическое преобразование примитива в соответствующую оболочку. В то время как int это примитив, String это не обертка.

Нет, это не автобокс.

Причина, по которой я думаю, это автобокс, который был введен в Java 5(нет в Java 4).

Ваша логика ошибочна.

Вопрос, на который вы ссылаетесь, касается изменения поведения String.valueOf(int) между Java 1.4.x и Java 1.5. Автобокс также был добавлен в Java 1.5. Однако нелогично делать вывод, что эти две вещи каким-либо образом связаны.

Кроме того, это не пример интернирования String. String.valueOf(int) не интернировал String ни в Java 1.5, ни в Java 1.4.x. (В случае Java 1.4.x для некоторых входных данных метод возвращал строки, которые ранее были интернированы, но это только потому, что они были строковыми литералами.)

Нет, это не будет рассматриваться как автобокс. Auto-Boxing находится между примитивами и классами Wrapper. Пожалуйста, обратитесь: http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html

Из документов:

Преобразование примитивного значения (например, int) в объект соответствующего класса-оболочки (Integer) называется автобоксом. Компилятор Java применяет автобокс, когда примитивное значение:

  • Передается в качестве параметра в метод, который ожидает объект соответствующего класса оболочки.
  • Присваивается переменной соответствующего класса-оболочки.
Другие вопросы по тегам