weixin_47387970
2020-12-18 15:11
采纳率: 57.1%
浏览 10
已采纳

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

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

不明白

求大佬们解答,蟹蟹!!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

6条回答 默认 最新

  • qq_25376897 2020-12-18 15:48
    已采纳

    几个知识点:

    1、==比较的是地址,存放的地址值不相同就是false。

    2、Integer是int的封装类,是对象,==对于对象是比较 地址 ,而int是基本类型,==就是比较值的大小

    3、ss.add(150) 这里其实是进行了自动封箱,即将int类型的150转成Integer(因为list<Integer>规定了里面的类型是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,因为比较的是同一个缓存

    点赞 打赏 评论
  • 林林林林七 2020-12-18 15:23

    地址值不一样

    点赞 打赏 评论
  • 林林林林七 2020-12-18 15:26

    == 是比较地址值的  你那句代码 存放的值虽然都是150 但是存放的地址值不相同 如果你改成equals比较就是true

    点赞 打赏 评论
  • weixin_47387970 2020-12-18 15:33

    这个跟String类型的比较是一个原理吗?

    点赞 打赏 评论
  • Motivation丶R 2020-12-18 15:35

    你把150换成-128~127就可是true了 这个和Integer的比较有关系,超过这个范围会去new一个Integer的对象

    点赞 打赏 评论
  • 林林林林七 2020-12-18 15:53

    超过127后会new一个对象来存放值  就是地址值不一样

    点赞 打赏 评论

相关推荐 更多相似问题