== 和 equals 区别

==操作符既可以用于比较基本类型数据,又可以在对象之间进行比较,equals方法则只能用于对象之间的比较。不能对==进行重载但是可以对equals方法进行重载。所以在对对象进行比较时,==只能用于判断俩个比较对象是否属于同一个引用,如果属于同一个引用则返回true,如果不是返回false,而在equals放啊中除了可以判断俩个比较对象是否属于同一个引用之外,还可以对equals方法进行重写,所以当我们自定义对象时,可以重写equals从而定义自己的equals方法。
在对String类型的对象进行比较时,如果采取==进行比较,则只有俩个变量属于同一个对象的引用时才会返回true,而equals方法的比较原则是只要俩个变量的内容相同则返回true。看如下例子

       String s1 =new String("你好");
        String s2 =new String("你好");
        String s3=s1;
        System.out.println(s1==s2);//false
        System.out.println(s1==s3);//true
        System.out.println(s1.equals(s2));//true
        System.out.println(s1.equals(s3));//true

s1和s2属于不同对象,==判断为false,而equals判断为true。因为String内重写了equals的方法,只要比较的对象内容相同就会返回true。s1和s3属于同一对象,内容也相同,所以都返回true
以下是String重写的equals方法

 public boolean equals(Object anObject) {
        if (this == anObject) { // 先比较对象  如果是同一个对象,就直接返回true
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) { // 在比较字符串的长度
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {  //然后一个字符一个字符的比较
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }

小结

  • ==操作符既可以用于比较基本的数据类型,也可以用于比较对象,而equals只可以用于对象之间的比较
  • 在比较String类型的对象时,==操作符的原理只有两个变量是同一对象的引用时才会返回true,而equals方法只要两个变量的内容相同则返回true
  • 其他类型的对象进行比较时,equals方法默认的原理是判断两者的内存地址是否相同,所以默认情况下与==操作符返回的结果相同,但是这里应该发现差别,也就是equals方法可以被重写—用户可以定制自己的equals方法,而==操作符不能被重写
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容