社区 > 技术交流 > Java中关于ArrayList类的一个问题,蹲一个大佬

Java中关于ArrayList类的一个问题,蹲一个大佬

川水往事 发布于2020-12-21 14:51:01   56浏览

这里为什么ss.get(0)==ss.get(1)为false呢?

不理解

求大佬们解答,谢谢!!


评论( 3
我要评论
  1. 玩世不恭的男人 2020-12-21 15:08:40
    几个知识点: 1、==比较的是地址,存放的地址值不相同就是false。 2、Integer是int的封装类,是对象,==对于对象是比较 地址 ,而int是基本类型,==就是比较值的大小 3、ss.add(150) 这里其实是进行了自动封箱,即将int类型的150转成Integer(因为list规定了里面的类型是Integer) 4、int a = ss.get(0) 这里就反过来进行自动拆箱,将Integer转成int,所以下面a==b返回的是true(值相等) 5、补充一点:对于Integer,当Int值范围在-128—127之间时,会通过一个IntegerCache缓存来创建Integer对象;当Int值不在该范围时,直接调用new Integer()来创建对象。 意思是:如果上面的ss.add(150) 换成ss.add(1),那下面的ss.get(0)==ss.get(1)就是true,因为比较的是同一个缓存
    (2) 回复 举报
  2. う愛尒の疒句 2020-12-21 15:13:20
    地址值不一样 == 是比较地址值的 你那句代码 存放的值虽然都是150 但是存放的地址值不相同 如果你改成equals比较就是true
    (1) 回复 举报
  3. 部落玩家 2020-12-21 15:33:19
    你把150换成-128~127就可是true了 这个和Integer的比较有关系,超过这个范围会去new一个Integer的对象
    (0) 回复 举报

还可以上传7

表情
热帖排行
热门话题
  1. 01 270人参与
  2. 02 175人参与
  3. 03 109人参与
  4. 04 54人参与
  • QQ扫码
  • 微信扫码