美文网首页
Java ArrayList的get()方法比较int型数据

Java ArrayList的get()方法比较int型数据

作者: JessyLee2012 | 来源:发表于2020-03-27 20:08 被阅读0次

    今天发现一个特别奇怪的问题,比较两个ArrayList<Integer>中的数值是否相等,结果发现总是测试不通过。代码如下:

    ArrayList<Integer> list = new ArrayList<>();
            list.add(127);
            list.add(127);
            list.add(128);
            list.add(128);
            System.out.println(list.get(0) == list.get(1)); //true
            System.out.println(list.get(2) == list.get(3)); //false
            System.out.println(list.get(0).equals(list.get(1))); //true
            System.out.println(list.get(2).equals(list.get(3))); //true
    
            int a = list.get(2);
            int b = list.get(3);
            System.out.println(a == b);  //true
    

    解析:

    • 如果用“==”判断两个引用数据类型,则是判断他们的地址是否相同。
    • 用equals()方法来判断则要看类中是否重新实现了equals()方法。如果没有重新实现,则和“==”一样判断地址是否一样;如果重新实现了equals()方法,可以判断两个引用类型的数据内容是否一样。
    • ArrayList中的get()方法对于-128 – 127之间的int型数据(包括-128和127)会自动装箱为数值类型。所以get方法返回的Integer对象如果数值在[-128,127]之间可以使用"==“来比较,而超过这个范围的数值需要使用equals()方法来比较。
    • java有自动装箱和拆箱,也可以用显式的拆箱操作来比较,如最后的代码那样。

    相关文章

      网友评论

          本文标题:Java ArrayList的get()方法比较int型数据

          本文链接:https://www.haomeiwen.com/subject/fwuruhtx.html