2013-08-01 96 views
0

AFAIK当Java自动将基元类型转换为包装类对象而不是称为自动装箱时,因为原语被装箱到包装类中。是否将int转换为一个计为Autoboxing的字符串?

所以是

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

算作自动装箱?

请问的理由?

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

回答

5

编号自动装箱只适用于原语 - >包装。由于没有String原语(或包装),String与自动装箱无关。

1

Autoboxes只有当“阻抗不匹配”引用类型和原始类型

No. 

如果我们看一下valueOf方法的源代码int PARAM

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

Integer wrapper调用toString之间

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

Autoboxing是原语自动转换为相应的包装。虽然int是原语,String而不是包装。

0

不,这不会被视为自动拳击。自动拳击是在原始和那里包装类之间。 请参考:http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html

从文档:

转换一个原始值(一个int,例如)插入到相应的包装类(整数)的对象被称为自动装箱。

  • 作为参数传递给需要相应的包装器类的对象的方法:当一个原始值是 Java编译器适用自动装箱。
  • 分配给相应包装类的变量。
0

不,这不是自动装箱。

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

您的逻辑有问题。

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

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