0

AFAIK当Java自动将原始类型转换为包装类对象时,它称为自动装箱,因为原始类型被装箱到包装类中。

也是

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

算作自动装箱吗?

问的理由?

我最近遇到了这个问题。我认为这是在 java 5 中引入的自动装箱(Java 4 中不存在)的原因。

4

6 回答 6

5

不,自动装箱仅适用于基元 -> 包装器。由于没有 String 原语(或包装器),因此 String 与自动装箱无关。

于 2013-08-01T06:55:46.887 回答
1

仅当引用类型和原语之间存在“阻抗不匹配”时才自动装箱

No.

如果我们看一下带有参数 的valueOf方法 的源代码 int

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

调用 ToStringInteger wrapper

在整数包装器中创建一个新字符串 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));
     }
于 2013-08-01T06:57:33.077 回答
1

自动装箱是将原语自动转换为其相应的包装器。Whileint是原语,String不是包装器

于 2013-08-01T07:01:04.660 回答
1

根据http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html自动装箱是 Java 编译器在原始类型及其相应的对象包装类之间进行的自动转换,String 不是对象包装班级。

于 2013-08-01T07:01:09.670 回答
0

不,这不会被视为自动装箱。自动装箱介于原始和包装类之间。请参考:http ://docs.oracle.com/javase/tutorial/java/data/autoboxing.html

从文档:

将原始值(例如 int)转换为相应包装类(Integer)的对象称为自动装箱。Java 编译器在原始值是以下情况时应用自动装箱:

  • 作为参数传递给需要相应包装类的对象的方法。
  • 分配给相应包装类的变量。
于 2013-08-01T07:16:34.760 回答
0

不,这不是自动装箱。

我认为的原因是在 java 5 中引入的自动装箱(Java 4 中不存在)。

你的逻辑有问题。

String.valueOf(int)您链接到的问题是关于Java 1.4.x 和 Java 1.5 之间的更改行为。Java 1.5 中还添加了自动装箱功能。然而,推断这两件事有任何联系是不合逻辑的。

此外,这不是字符串实习的示例。 String.valueOf(int)在 Java 1.5 或 Java 1.4.x 中都没有实习过 String。(在 Java 1.4.x 的情况下,对于某些输入,该方法确实返回了之前被实习过的字符串,但这只是因为它们是字符串文字。)

于 2013-08-01T08:22:31.203 回答