对于Integer的一些疑问

michalechuan 2018-04-17 11:34:57
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()?这句着实不懂呀,有没高手能详解下,越详细越好,谢谢了!
...全文
798 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
肥的圆不愣瞪 2018-04-19
  • 打赏
  • 举报
回复
看看Integer底层源码,自动缓存-128到127 除了Double Float不缓存外 其余都有缓存
Bling523 2018-04-18
  • 打赏
  • 举报
回复
java的自动装箱功能,当你输入int 类型的250时!会默认进行数据类型转换 将int类型的250提升为Integer类型
Delis 2018-04-18
  • 打赏
  • 举报
回复
Java 中类型分两类: 基本类型(short int ,float ,double, byte , char,boolean ,long ) 引用类型(与基本类型对应的引用类型Short , Integer,Float,Double,ByteCharacter,Long). 从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. )
自由自在_Yu 2018-04-18
  • 打赏
  • 举报
回复
为什么equals250 是true啊? 弄明白“==”和equals的区别就知道为什么了,equals就是比较两个数值是不是相等的。“==”不仅比较数值,还要比较内存中对应的地址 例如1,2,3....都是Integer的实例呀? 默认的是int类型 ((Integer)obj).intValue(); 把obj强制转换成Integer类型,然后获取int数值,就是250,这个250仅仅是一个int类型的数值250, 所以这里return value == ((Integer)obj).intValue();比较的就是简单的数学上的250==250;不是Integer对象的比较
michalechuan 2018-04-18
  • 打赏
  • 举报
回复
引用 2 楼 yuxiangaaaaa 的回复:
为什么equals250 是true啊? 弄明白“==”和equals的区别就知道为什么了,equals就是比较两个数值是不是相等的。“==”不仅比较数值,还要比较内存中对应的地址 例如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的实例?求大神继续深入一下,谢谢

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧