如果用户将原始类型参数传递给println(),那么场景后面到底会发生什么呢?例如:
int i =1;
System.out.println("My Int"+i);
//and in
System.out.println(i)它如何打印"My Int 1"和"1",即使它需要一个String对象?
更新.
我认为AutoBoxing起作用了。这也是真的吗
发布于 2011-08-11 11:03:35
它不需要字符串对象,这里也没有自动装箱。还有原语类型的方法:
公开无效印刷(Int i) 打印一个整数。String.valueOf(int)生成的字符串根据平台的默认字符编码转换为字节,这些字节完全按照写(Int)方法的方式编写。
发布于 2011-08-11 11:03:48
System.out.println("My Int"+i);等于
System.out.println(new StringBuilder().append("My Int").append(i).toString();例如, :
public class Main{
public static void main(String[] ar){
int i = 10;
System.out.println("My Int"+i);
}
}现在遵守代码
public static void main(java.lang.String[]);
Code:
0: bipush 10
2: istore_1
3: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
6: new #3; //class java/lang/StringBuilder
9: dup
10: invokespecial #4; //Method java/lang/StringBuilder."<init>":()V
13: ldc #5; //String My Int
15: invokevirtual #6; //Method java/lang/StringBuilder.append:(Ljava/lang/
String;)Ljava/lang/StringBuilder;
18: iload_1
19: invokevirtual #7; //Method java/lang/StringBuilder.append:(I)Ljava/lan
g/StringBuilder;
22: invokevirtual #8; //Method java/lang/StringBuilder.toString:()Ljava/la
ng/String;
25: invokevirtual #9; //Method java/io/PrintStream.println:(Ljava/lang/Str
ing;)V
28: return发布于 2011-08-11 11:01:51
实际上println不需要字符串对象。它也被定义为int。
编辑:
如何: println是一个重载的方法。它有不同的版本:
public void println(int x) {
print(x);}公开无效println(长x) {} .
//that is what it does
public void print(int i) {
write(String.valueOf(i));
}https://stackoverflow.com/questions/7024674
复制相似问题