java吧 关注:1,275,509贴子:12,790,264

为什么a==h是true,有大佬帮忙看看嘛

只看楼主收藏回复



1楼2020-02-28 15:24回复
    我记得128以下自动拆装箱,以上就不相等了


    IP属地:河南2楼2020-02-28 15:28
    收起回复
      2025-08-25 19:52:11
      广告
      不感兴趣
      开通SVIP免广告
      23+100 不等于123吗


      来自Android客户端3楼2020-02-28 15:30
      收起回复

        看我选中的部分


        IP属地:河南4楼2020-02-28 15:53
        回复
          h没有new开辟新空间 所以h和a的地址都是常量池的地址 ==比较的实质是地址相同就为true


          IP属地:安徽来自Android客户端5楼2020-02-28 18:37
          收起回复
            包装类integer里面有个缓存 -128到127都是同一个对象


            IP属地:北京来自iPhone客户端6楼2020-03-01 02:13
            回复
              -128到127之间为int


              IP属地:四川来自Android客户端7楼2020-03-01 13:36
              回复
                因为a是自动装箱出来的,自动装箱有一个缓冲区,-128到127自动装箱,只要值相等,就都是同一个Integer对象。这个时候你的e+f做运算的时候,会把e拆箱,然后跟100相加,得到123之后再自动装箱赋给h,所以a==h


                IP属地:湖南来自iPhone客户端8楼2020-03-01 14:05
                回复
                  2025-08-25 19:46:11
                  广告
                  不感兴趣
                  开通SVIP免广告
                  没有new对象的话是使用常量池中的值,底层指向的内存位置为一个,故为true,new对象后开辟新的内存空间 比较内存空间故为false


                  IP属地:北京9楼2020-03-01 14:16
                  回复
                    -128到127之间是从常量池拿的 a和h指向的同一个对象


                    IP属地:江苏来自iPhone客户端10楼2020-03-01 14:29
                    回复
                      还在学员阶段?


                      来自Android客户端11楼2020-03-01 15:02
                      回复
                        在Python里面-128到128(还是127我忘记了)的整数,Python会自动分配地址放里面,也就是说你怎么调用这些变量,他们只要数值一样,都指向同一地址空间,Java我不知道


                        IP属地:江苏来自Android客户端12楼2020-03-01 15:13
                        回复
                          缓存区


                          IP属地:广东来自Android客户端14楼2020-03-01 23:10
                          回复
                            经过运算之后,就会自动拆箱了,如果你把a变成23,那么结果就会变成false


                            IP属地:辽宁15楼2020-03-02 10:14
                            回复
                              2025-08-25 19:40:11
                              广告
                              不感兴趣
                              开通SVIP免广告
                              如果不理解 试着把双= 换成!=


                              IP属地:江苏来自iPhone客户端16楼2020-03-03 08:59
                              回复