将int转换为String计为Autoboxing?

时间:2013-08-01 06:52:28

标签: java autoboxing string-interning

AFAIK当Java自动将原始类型转换为包装类对象而不是其调用的自动装箱时,因为原语被装入包装类。

所以

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

算作自动装箱?

要问的理由?

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

6 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

仅当引用类型和基元之间存在“阻抗不匹配”时才会自动进行运行

No.

如果我们使用valueOf param

查看int方法的源代码
 public static String More ...valueOf(int i) {
      return Integer.toString(i, 10);
 }

Integer wrapper

上调用ToString

在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));
     }

答案 2 :(得分:1)

Autoboxing是将基元自动转换为相应的包装器。虽然int是原始的,但String 不是是一个包装器。

答案 3 :(得分:1)

根据http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html,autoboxing是Java编译器在基元类型和它们对应的对象包装类之间进行的自动转换,String不是对象包装类。

答案 4 :(得分:0)

不,这不会被视为自动拳击。 Auto-Boxing介于原语和Wrapper类之间。 请参阅:http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html

来自文档:

将原始值(例如int)转换为相应包装类(Integer)的对象称为autoboxing。 当原始值为:

时,Java编译器应用自动装箱
  • 作为参数传递给期望相应包装类的对象的方法。
  • 分配给相应包装类的变量。

答案 5 :(得分:0)

不,这不是自动装箱。

  

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

你的逻辑是错误的。

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

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