欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > > 文章正文

JavaSE equlas和==的区别,javaseequlas区别

来源: javaer 分享于  点击 37426 次 点评:248

JavaSE equlas和==的区别,javaseequlas区别


Java 语言里的 equals方法其实是交给开发者去覆写的,让开发者自己去定义满足什么条件的两个Object是equal的。
所以我们不能单纯的说equals到底比较的是什么。你想知道一个类的equals方法是什么意思就是要去看定义。

Object类中默认的equals方法实现如下:

public boolean equals(Object obj) {
    return (this == obj);
}
自定义的类是继承于object,而object中的equals就是用==来实现的,如果没有重写equals方法,那么其equals操作也是与Object类一样,仅仅是直接调用==操作

1.当==来判断基本类型变量时,且都是数值类型(不一定需要数据类型严格相同),则只要两个变量的值相等,就返回true

当==来判断引用类型变量时,只有他们都指向同一个对象时,==判断才为true。(String、对象、数组都是引用类型变量)


2.equals()的返回结果依赖于具体业务实现。

比如String类则覆写了这个方法,直观的讲就是比较字符是不是都相同。也就是对字符串的内容进行比较

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = count;
        if (n == anotherString.count) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = offset;
            int j = anotherString.offset;
            while (n-- != 0) {
                if (v1[i++] != v2[j++])
                    return false;
            }
            return true;
        }
    }
    return false;
}


例如

Q:下面的代码片段的输出是什么?

Object s1 = new String("Hello");
Object s2 = new String("Hello");
 
if(s1 == s2) {
  System.out.println("s1 and s2 are ==");
} if (s1.equals(s2)) {
  System.out.println("s1 and s2 are equals()");
}
A:输出      s1 and s2 are equals()
前者比较引用,后者则比较对象中真正的值。


Q:下面的代码片段的输出是什么?

Object s1 = "Hello";
Object s2 = "Hello";
 
if(s1 == s2) {
  System.out.println("s1 and s2 are ==");
} if (s1.equals(s2)) {
  System.out.println("s1 and s2 are equals()");
}
A:输出
s1 and s2 are ==
s1 and s2 are equals()


总结:

1.通俗的来说,在String类中,==是同一个人才返回true,equlas是一对双胞胎比较也是返回true。

相关文章

    暂无相关文章

用户点评