java.lang.Object o=1//为什么要编译?
我在做一个在线Java测试,有人问我这个问题: Q:指出正确的作业:java.lang.Object o=1//为什么要编译?,java,autoboxing,Java,Autoboxing,我在做一个在线Java测试,有人问我这个问题: Q:指出正确的作业: Long l = 1; Double d = 1; Integer i = 1; String s = 1; Object o = "1"; System.out.println(o); o = 1; System.out.println(o); 请你自己试一试再进一步 我可以告诉你我弄错了,我调查了一下发现: //Long l = 1; //cannot widen and then box Long ll = 1L;/
Long l = 1;
Double d = 1;
Integer i = 1;
String s = 1;
Object o = "1";
System.out.println(o);
o = 1;
System.out.println(o);
请你自己试一试再进一步
我可以告诉你我弄错了,我调查了一下发现:
//Long l = 1; //cannot widen and then box
Long ll = 1L;//no need to widen, just box
//Double d = 1;//cannot widen and then box
Double dd = 1d;//no need to widen, just box
Integer i = 1;//no need to widen, just box
//String s = 1;//cannot do implicit casting here
Object o = "1";//this compiles and is just plain weird
System.out.println(o);//output is 1
o = 1;//this also compiles and is also weird
System.out.println(o);//output is 1
有人能说出原因吗:
对象o=1代码>和对象o=“1”代码>
在这两种情况下编译并输出1,这让我感到困惑
非常感谢“1”
是String类的一个实例,String是Java中对象类的一个子类(与任何其他类一样)1
被装箱成一个整数,这个整数也是从Object派生的。好吧,第一种情况“1”是一个字符串
文本,因此是Object的一个子类,因此可以分配给它。作为一个字符串,1的输出相对简单
在第二种情况下,自动装箱正在发生Integer
是object的一个子类,因此可分配给它。类似地,1的输出也很有意义。这是因为o
属于对象类型。java中的每个对象都扩展了类object
。所以当你说objecto=1
时,它将1从int
转换为Integer
,这是一个对象
。类似地,“1”是一个字符串
,它是一个对象
。在这两种情况下,对对象
调用对象
调用对象
stoString
方法。在这两种情况下,它都将打印1。您可以将对象o=任何内容
其中anything
是任意对象,因为所有类都派生自对象
类。它与原语一起工作,因为java 1.5提供了自动装箱功能。因为“1”
是字符串的实例,而1.51
可以自动装箱为整数
;这两种类型都是对象的子类型。在引入自动装箱之前,Object o=1代码>无法编译
要充分利用此学习体验,您应该了解Object
的getClass()
方法。通过添加System.out.println(o.getClass().getName())
,还可以打印o
引用的对象所属的类的名称。在您的例子中,它们是java.lang.String
(对于(对象)“1”
)和java.lang.Integer
(对于(对象)1
)
为了完成,我应该提到,您现在也可以执行objecto=false代码>哇,谢谢你的回答,但我必须告诉你,我现在觉得自己很愚蠢,我应该知道这一点。@Ramo:不质疑你不知道的事情是愚蠢的:-)