先来看下面的一段程序:
Object value1=0;
Integer value2=0;
Long value3=new Long(0);
System.out.println(value1.equals(value2));
System.out.println(value1.equals(value3));
各位在看我下面的答案之前可以先自己判断一下输出的是什么,测试后输出的是:
true
false
为什么是这样的输出,这里面有两点内容:
1、Object value1=0;这样写的话,默认value1的类型就是Integer类型的,各位可以这样输出一下:
System.out.println(value1.getClass());
输出会是:
class java.lang.Integer
2、我们都知道equals比较的是两个对象的内容是否相同,但是要明确一点,这两个对象的类型是要相同的。
根据上面两点的分析,就不难得出上面的输出结果了。
不过对于这个还有一个问题,我没想明白,对于:
Object value1=0;
如果没做特殊的说明,会默认value1是Integer类型的,也就是说value1的取值不能超过Integer的最大值,在MyEclipse中直接书写,超过Integer的最大取值编译是通不过的,会报out of range错误:
但是我这样书写:
Object value1=Integer.MAX_VALUE+200;
这样写为什么可以,而且有输出:
-2147483449
对于这点不是很明白,哪位指导一下。