uuuuuu10248 2020-12-18 15:11 采纳率: 60%
浏览 19
已采纳

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,因为比较的是同一个缓存

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 fluent的在模拟压强时使用希望得到一些建议
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 Web.config连不上数据库
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。
  • ¥15 怎么配置广告联盟瀑布流
  • ¥15 Rstudio 保存代码闪退