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.
Run Code Online (Sandbox Code Playgroud)
当System.out.println(ki); 执行然后50出现在控制台但是当我打印其他对象时,像package_name.Class@15db9742这样的东西出现为什么50出现而不是像package_name.Class@15db9742?
我虽然ki是Integer类型,所以当我分配3的原始值时,我应该得到一个错误,但我不是为什么?
T.J*_*der 11
那里有两个不同的问题:
Run Code Online (Sandbox Code Playgroud)System.out.println(ki);//Here I would expect to print the objects name something like package_name.Class@15db9742 but this didn't happen.
因为Integer覆盖toString.它的实施:
public String toString() {
return String.valueOf(value);
}
Run Code Online (Sandbox Code Playgroud)
嗯...或因为println(int)存在PrintStream.
不,它正在调用System.out.println(Object),然后toString在对象上使用.这是因为(正如规范告诉我们的那样)规则是首先尝试找到一个没有自动(非)拳击而没有varargs的匹配签名; 然后只用自动(非)拳击,然后最后两个.
Run Code Online (Sandbox Code Playgroud)ki=3;//Here I would expect an error but this actually works.
这是因为自动装箱:Java编译器插入必要的代码来获取该原语3并为其创建Integer实例.它实际发出的字节码是这样的:
ki = Integer.valueOf(3);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
246 次 |
| 最近记录: |