为什么可以打印;“正确地”;java中的整数对象?

为什么可以打印;“正确地”;java中的整数对象?,java,Java,当系统输出println(ki)时executed然后50出现在控制台中,但当我打印其他对象时,会显示一些东西,比如package\u name。Class@15db9742显示50出现的原因,而不是包名称。Class@15db9742? 我认为ki是整数类型,所以当我将原语值赋值为3时,我应该会得到一个错误,但我不知道为什么?这里有两个独立的问题: 因为。其执行: System.out.println(ki);//Here I would expect to print the objects

系统输出println(ki)时executed然后50出现在控制台中,但当我打印其他对象时,会显示一些东西,比如package\u name。Class@15db9742显示50出现的原因,而不是包名称。Class@15db9742?


我认为ki是整数类型,所以当我将原语值赋值为3时,我应该会得到一个错误,但我不知道为什么?

这里有两个独立的问题:

因为。其执行:

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

不,它正在调用
System.out.println(Object)
,然后在对象上使用
toString
。这是因为(正如所告诉我们的)规则是首先尝试在没有自动装箱和varargs的情况下找到匹配的签名;然后是自动(联合国)装箱,最后是两者兼而有之

这是因为:Java编译器插入必要的代码来获取该原语
3
,并为其创建一个
Integer
实例。它实际发出的字节码执行以下操作:

 ki=3;//Here I would expect an error but this actually works.

了解装箱和自动装箱:您应该通过Java教程至少了解基本的语言语义。@AndrewLi遗憾的是,那篇文章中的答案并没有真正的帮助。@xlxs您确定吗?这很好地解释了“奇怪的印刷”。第二个问题的答案是阅读关于自动装箱和autounboxing@AndrewLi对不起,我错了。如果最后一个类是正确的整数,那就有用了。final类的方法可以被重写吗?@xlxs:你是正确的,它是
final
,不,final类的要点是它不能被子类化;因为只有子类可以重写方法,所以不能重写最终类的方法
Integer
覆盖
对象的
toString
Number
位于它们之间,但不覆盖
toString
),但是
Integer
toString
不能被覆盖,因为它不能被子类化。感谢您的帮助:)
public String toString() {
    return String.valueOf(value);
}
 ki=3;//Here I would expect an error but this actually works.
ki = Integer.valueOf(3);