public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
上面是java原码,integer的equals方法,请 看 我写的demo
Integer i51 = 250;
Integer i61 = 250;
System.out.println(i51 == i61);
System.out.println(i51.equals(250)); //true
System.out.println(i51.equals(i61)); //true
为什么equals250 是true啊,代入原码中 ,先判断 obj instanceof Integer ,这个250是obj?是不是任意一个整型数字,注意是整型数字,例如1,2,3....都是Integer的实例呀?
((Integer)obj).intValue() ,这前面的(Integer),代表强制转换吗?也就是说 底层是 (Integer)250.intValue()?这句着实不懂呀,有没高手能详解下,越详细越好,谢谢了!
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
上面是java原码,integer的equals方法,请 看 我写的demo
Integer i51 = 250;
Integer i61 = 250;
System.out.println(i51 == i61);
System.out.println(i51.equals(250)); //true
System.out.println(i51.equals(i61)); //true
为什么equals250 是true啊,代入原码中 ,先判断 obj instanceof Integer ,这个250是obj?是不是任意一个整型数字,注意是整型数字,例如1,2,3....都是Integer的实例呀?
((Integer)obj).intValue() ,这前面的(Integer),代表强制转换吗?也就是说 底层是 (Integer)250.intValue()?这句着实不懂呀,有没高手能详解下,越详细越好,谢谢了!
例如1,2,3....都是Integer的实例呀? 默认的是int类型
((Integer)obj).intValue(); 把obj强制转换成Integer类型,然后获取int数值,就是250,这个250仅仅是一个int类型的数值250,
所以这里return value == ((Integer)obj).intValue();比较的就是简单的数学上的250==250;不是Integer对象的比较
我知道equals和==的区别,我比较不明白的是那句话:if (obj instanceof Integer)
第一我想问的是 250就是obj?换而言之,是不是 我在任意数字,不用定义变量 ,也就是obj?1就是obj?
instanceof的意思,不是比较等号左边是不是右边的实例吗?也就是说 250 instanecof Integer 是true,换而言之,任意整型的数字带入这里都是Integer的实例?
i5 instanceof Integer,这个我能理解,我不能理解的就是,明明我全文没有定义这个250,为什么一个常量就可以是Integer的实例?求大神继续深入一下,谢谢
从5.0 开始引用了自动打包. 即 Integer i51 = 250 等价于 Integer i50=new Integer(250) :250 是一个int类量的字面量,自动打包成了一个Integer 实例。还有查了下api 已不建议使用此构造函数(Deprecated. It is rarely appropriate to use this constructor. The static factory valueOf(int) is generally a better choice, as it is likely to yield significantly better space and time performance. )
除了Double Float不缓存外 其余都有缓存