为什么可以正确打印"" java中的Integer对象?

时间:2016-11-13 15:50:52

标签: java

Integer ki=new Integer("50");
System.out.println(ki);//Here I would expect to print the objects name something like package_name.Class@15db9742 but this didn't happen.
ki=3;//Here I would expect an error but this actually works.

System.out.println(ki); 执行时,控制台中出现50但是当我打印其他对象时,会出现一些类似package_name.Class@15db9742的内容,为什么会出现50而不是像package_name这样的东西的.class @ 15db9742?

我虽然ki是Integer类型,所以当我分配3的原始值时,我应该得到一个错误,但我不知道为什么?

1 个答案:

答案 0 :(得分:11)

你有两个不同的问题:

<input>

因为Integer overrides toString。它的实施:

System.out.println(ki);//Here I would expect to print the objects name something like package_name.Class@15db9742 but this didn't happen.

嗯......还是因为println(int) exists on PrintStream

不,它正在调用public String toString() { return String.valueOf(value); } ,然后在对象上使用System.out.println(Object)。这是因为(正如specification告诉我们的那样)规则是首先尝试找到一个匹配的签名,而不是自动(非)拳击而没有varargs;然后只用自动(非)拳击,然后最后两个。

toString

这是因为autoboxing:Java编译器插入必要的代码来获取该原语 ki=3;//Here I would expect an error but this actually works. 并为其创建3实例。它实际发出的字节码是这样的:

Integer