关于==和equals碰到的问题

首先

  1. ==是判断两个变量或实例是不是指向同一个内存空间,equals是判断两个变量或实例所指向的内存空间的值是不是相同
  2. ==是指对内存地址进行比较 , equals()是对字符串的内容进行比较
  3. ==指引用是否相同, equals()指的是值是否相同
class Solution {
    public boolean isPalindrome(ListNode head) {
        List<Integer> vals=new ArrayList<Integer>();
        ListNode curr=head;
        //copy to list
        while(curr!=null){
            vals.add(curr.val);
            curr=curr.next;
        }
        //double pointer
        int i=0,j=vals.size()-1;
        while(i<j){
            if(vals.get(i)!=(vals.get(j)){
                return false;
            }
            i++;
            j--;
        }
        return true;
    }
}

可以看到报错了
在-128~127的Integer值进行 == 和 equals比较时,都会返回true,因为Java里面对处在在-128127之间的Integer值,用的是原生数据类型int,会在内存里供重用,也就是说这之间的Integer值进行==比较时只是进行int原生数据类型的数值比较,而超出-128127的范围,进行==比较时是进行地址及数值比较。
改为equals():
在这里插入图片描述

发布了4 篇原创文章 · 获赞 0 · 访问量 24

猜你喜欢

转载自blog.csdn.net/qq_43720965/article/details/104460177