Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.Object o=1//为什么要编译?_Java_Autoboxing - Fatal编程技术网

java.lang.Object o=1//为什么要编译?

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;/

我在做一个在线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;//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”是一个
字符串
,它是一个
对象
。在这两种情况下,对
对象
调用
对象
调用
对象
s
toString
方法。在这两种情况下,它都将打印1。

您可以将
对象o=任何内容
其中
anything
是任意对象,因为所有类都派生自
对象
类。它与原语一起工作,因为java 1.5提供了自动装箱功能。

因为
“1”
字符串的实例,而1.5
1
可以自动装箱为
整数
;这两种类型都是
对象的子类型。在引入自动装箱之前,
Object o=1无法编译

要充分利用此学习体验,您应该了解
Object
getClass()
方法。通过添加
System.out.println(o.getClass().getName())
,还可以打印
o
引用的对象所属的类的名称。在您的例子中,它们是
java.lang.String
(对于
(对象)“1”
)和
java.lang.Integer
(对于
(对象)1


为了完成,我应该提到,您现在也可以执行
objecto=false

哇,谢谢你的回答,但我必须告诉你,我现在觉得自己很愚蠢,我应该知道这一点。@Ramo:不质疑你不知道的事情是愚蠢的:-)