美文网首页APP端
关于 "==" 、equals 与 Text

关于 "==" 、equals 与 Text

作者: 我们都很努力着 | 来源:发表于2019-04-01 16:02 被阅读0次
    1、"=="和equals方法究竟有什么区别?

    ==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同

    要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。

    equals方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的。

    例如:

    String a=new String("A");
    
    String b=new String("A");
    

    两条new语句创建了两个对象,然后用a/b这两个变量分别指向了其中一个对象,这是两个不同的对象,它们的首地址是不同的,即a和b中存储的数值是不相同的,所以,表达式a==b将返回false,而这两个对象中的内容是相同的,所以,表达式a.equals(b)将返回true。

    在实际开发中,我们经常要比较传递进行来的字符串内容是否等,

    例如:

    String falg = "falg";
    falg.equals(“quit”),
    

    许多人稍不注意就使用==进行比较了,这是错误的,记住,字符串的比较基本上都是使用equals方法。

    在日常开发过程中,通常我们在使用equals的时候也要注意。先看系统源码。

        public boolean equals(Object anObject) {
            if (this == anObject) {
                return true;
            }
            if (anObject instanceof String) {
                String anotherString = (String)anObject;
                int n = length();
                if (n == anotherString.length()) {
                    int i = 0;
                    while (n-- != 0) {
                        if (charAt(i) != anotherString.charAt(i))
                                return false;
                        i++;
                    }
                    return true;
                }
            }
            return false;
        }
    

    如果equals之前的参数为NULL,会出现空指针异常

    例如:

    String key = null;
    key.equals(falg);
    

    这是错误的。

    解决方式:一是将其进行翻转
    falg.equals(key);
    
    解决方式:二使用Textutils.equals() (推荐方式)
    Textutils.equals(key,falg)
    

    源码如下

        public static boolean equals(CharSequence a, CharSequence b) {
            if (a == b) return true;
            int length;
            if (a != null && b != null && (length = a.length()) == b.length()) {
                if (a instanceof String && b instanceof String) {
                    return a.equals(b);
                } else {
                    for (int i = 0; i < length; i++) {
                        if (a.charAt(i) != b.charAt(i)) return false;
                    }
                    return true;
                }
            }
            return false;
        }
    

    相关文章

      网友评论

        本文标题:关于 "==" 、equals 与 Text

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