【问题标题】:Is converting int to a String counted as Autoboxing?将 int 转换为 String 算作自动装箱吗?
【发布时间】:2013-08-01 06:52:27
【问题描述】:
AFAIK 当 Java 自动将原始类型转换为包装类对象时,它称为自动装箱,因为原始类型被装箱到包装类中。
原来如此
int test = 3;
String str = String.valueOf(test);
算作自动装箱吗?
问的理由?
我最近遇到了this 的问题。我认为的原因是在 java 5 中引入的自动装箱(Java 4 中不存在)。
【问题讨论】:
标签:
java
autoboxing
string-interning
【解决方案1】:
没有。自动装箱仅适用于原语 -> 包装器。由于没有 String 原语(或包装器),因此 String 与自动装箱无关。
【解决方案2】:
Autoboxing 是原语到其相应包装器的自动转换。 int 是一个原语,String 不是一个包装器。
【解决方案4】:
仅当引用类型和原语之间存在“阻抗不匹配”时才会自动装箱
No.
如果我们用int参数查看valueOf方法的源代码
public static String More ...valueOf(int i) {
return Integer.toString(i, 10);
}
在 Integer wrapper 上调用 ToString
在整数包装器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));
}
【解决方案6】:
不,这不是自动装箱。
我认为原因是在 java 5 中引入的自动装箱(Java 4 中不存在)。
你的逻辑是错误的。
您链接到的问题是关于 Java 1.4.x 和 Java 1.5 之间 String.valueOf(int) 的更改行为。 Java 1.5 中还添加了自动装箱功能。然而,推断这两件事有任何联系是不合逻辑的。
另外,这不是字符串实习的例子。 String.valueOf(int) 没有在 Java 1.5 或 Java 1.4.x 中实习字符串。 (在 Java 1.4.x 的情况下,对于某些输入,该方法确实返回了之前被实习过的字符串,但这只是因为它们是字符串文字。)