加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java之equals和==区别

发布时间:2020-12-15 07:14:50 所属栏目:Java 来源:网络整理
导读:equals和==是Java中用到频率很高的,虽然不少开发者使用第三方的JAR包如hutool中的StrUtil.isEmptyIfStr(Object obj)这个方法中源代码就是==, 如下源代码: public static boolean isEmptyIfStr(Object obj) { if ( null == obj) { return true ; } else if (

equals和==是Java中用到频率很高的,虽然不少开发者使用第三方的JAR包如hutool中的StrUtil.isEmptyIfStr(Object obj)这个方法中源代码就是==,
如下源代码:

public static boolean isEmptyIfStr(Object obj) {
        if (null == obj) {
            return true;
        } else if (obj instanceof CharSequence) {
            return 0 == ((CharSequence) obj).length();
        }
        false;
    }

再比如我再这篇文章SpringCloud之Security中的自定义登录验证就用到equals和==。

可以说不论过去还是现在,我所开发的Java系统都涉及到这两个(凡是牵涉到判断的地方基本都这么用,不排除不少公司用第三方API封装好的,但本质上都是这些的封装和判断)。

虽然在用但对其也不是非常了解,所以有必要深入。

1.先说说equals和==的区别

(1)对于==
如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;如果作用于引用类型的变量,则比较的是所指向的对象的地址。

(2)对于equals方法,
注意:equals方法不能作用于基本数据类型的变量,如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址,如果对equals方法进行重新,则比较的就是值是否相等。

2.以String源代码equals为例

public boolean equals(Object anObject) {
    this == anObject) {
        ;
    }
     (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-- != ) {
                if (v1[i] != v2[i])
                    ;
                i++;
            }
            ;
        }
    }
    ;
}

这段代码可以这么理解:
在String类中equals方法不仅可以用==判断对象的内存地址是否相等,相等则返回true。如果前面的判断不成立,接着判断括号内的对象上是否是String类型,接着判断两个字符串对象的的长度是否相等,最后判断内容是否相等,如果相等则返回true。

来个例子,如下:

String s1 = "blog";

String s2 = new String();

System.out.println(s1 == s2);//输出结果为false

System.out.println(s1.equals(s2)); 输出结果为true

?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读