qq_36428629 2021-07-20 11:03 采纳率: 100%
浏览 68
已采纳

List集合==和equals的问题

    for (int i = 0; i < nums.size(); i++) {
        for (int j = 0; j < nums.size(); j++) {
               if (nums.get(i).equals(nums.get(j))){    /*这里为什么不能用==,
                     使用==如果是三位数以下就能跑,否则无论两个数是否相等都判断    
                                                        为false,这是为什么?*/
                   x[i]=x[i]+1;  //遍历nums中的每一个元素,记录其出现的次数,放到数组x当中,x与nums的关系是次数与数的关系

           }
        }
    }

这个方法的作用是遍历出当前集合中相同数字出现的次数,并且对应的存放于新数组当中
例如:[2,2,2,2,1,1,1,2]
对应:[5,5,5,5,3,3,3,5]
问题是为什么用==一旦集合的元素大小超过三位数就不行了?
例如:

for (int i = 0; i < nums.size(); i++) {
            for (int j = 0; j < nums.size(); j++) {
                   if (nums.get(i)==(nums.get(j))){    /*这里为什么不能用==,
                         使用==如果是三位数以下就能跑,否则无论两个数是否相等都判断    
                                                            为false,这是为什么?*/
                       x[i]=x[i]+1;  //遍历nums中的每一个元素,记录其出现的次数,放到数组x当中,x与nums的关系是次数与数的关系

               }
            }
        }

输入:[407,407,407,63,59,407,197]
输出:[1,1,1,1,1,1,1] // 00 11 22 33 44 55 66 分别进入if一次!

输入:[96,96,97,97,97,96,95,95,97,97,97]
输出:[3, 3, 6, 6, 6, 3, 2, 2, 6, 6, 6] 正确结果!

  • 写回答

3条回答 默认 最新

  • 是赵敢敢啊 2021-07-20 13:58
    关注

    == 比较的是内存地址 ,对象比较的应该用equals.
    你的 List里边的泛型是Integer ,如果你看过Integer的源码你就会发现
    Integer 类中有一个静态类 IntegerCache ,
    这个IntegerCache类存储了常用的一些数字,如果我没记错的话应该是 -128 ~ 127

     public static Integer valueOf(int i) {
            if (i >= IntegerCache.low && i <= IntegerCache.high)
                return IntegerCache.cache[i + (-IntegerCache.low)];
            return new Integer(i);
    }
    

    所以你用 -128 -127 之间的数 == 比较的时候没实际上都是从 IntegerCache中取出来作比较的,他们在内存中是用的一样的,
    但是当你的值 小于 -128 或者是 大于127的时候,她就去新创建了一个Integer对象,分配了新的内存空间。
    就是你所说的三位数以下是可以的原因
    如有帮助,请采纳

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

报告相同问题?

问题事件

  • 已采纳回答 7月20日
  • 创建了问题 7月20日

悬赏问题

  • ¥15 怎样才能让鼠标沿着线条的中心线轨迹移动
  • ¥60 用visual studio编写程序,利用间接平差求解水准网
  • ¥15 Llama如何调用shell或者Python
  • ¥20 谁能帮我挨个解读这个php语言编的代码什么意思?
  • ¥15 win10权限管理,限制普通用户使用删除功能
  • ¥15 minnio内存占用过大,内存没被回收(Windows环境)
  • ¥65 抖音咸鱼付款链接转码支付宝
  • ¥15 ubuntu22.04上安装ursim-3.15.8.106339遇到的问题
  • ¥15 blast算法(相关搜索:数据库)
  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?