=,==,===,equals()的区别

=

= 是赋值运算符,就是向变量赋值用的

如下,定义一个变量anthor并赋初值为CHAoLip。这个不多赘述了。

//JavaScript
var author = "ChAoLip";

 

==

==是比较运算符,==比较的是对象的地址,也就是判断是否为同一个对象;

或者这么说吧:

当比较基本数据类型时,==就是比较值是否相等

当比较引用数据类型时,例如比较两个对象的引用时,==比较的就是引用变量的地址是否相同

 

===

“===”一般在JS中使用,用于判断左右两个操作数是否严格相同,比较原则比“==”更严格,“===”既比较内容,又比较数据类型。

这里主要注意两点:

(1)如果类型不同,就一定不相等(返回false)

(2)如果比较对象中有至少一个是NaN,那么一定不相等。(判断一个值是否是NaN,只能使用isNaN( ) 来判断)

其他情况下(如字符串、null、undefined、数值型等)就是判断左右两侧是否数据类型相同并且数据值完全相同。

 

equals()

equals()是方法,不是运算符在Java中,所有类都继承了Object类。而在Object类中,equals()方法是这么定义的

//equals方法的实现原理
public boolean equals(Object obj) {
    return (this == obj)
}

其实,在原生的Object类中,equals()方法的实现也是依靠"=="实现的,所以原生的equals()和"=="并无差别

但是很多类都会重写equals()方法,重写之后equals()方法就不和"=="相同了,例如在String.java源文件中,String类的equals()方法重写如下:

public boolean equals(Object anObject) {
        if (this == anObject) {
            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;
    }

在String类中,equals()方法判断条件如下:

1)若当前对象和比较的对象是同一个对象(用"=="判断的),即返回true。实际上这就是Object中的equals方法。

2) 若当前传入的对象是String类型,则比较两个字符串的长度(value.length)。若长度不相同,返回 false。若长度相同,则按照数组value中的每一位进行比较,每一位都相同返回true,有不同时返回false。

3)若当前传入的对象不是String类型,则直接返回false。

所以最终重写后,equals()方法比较的其实是值(内容)是否相等,而不是内存地址是否相等了。除了String以外,Java中大部分类都重写了equals方法,比如包装类Integer,Double,Long等。

在我们日常使用中,如果要比较两个引用是否指向同一个对象(内存地址是否相同),应该用 "==" 比较 ,如果想比较内容是否相等可以尝试使用equals()方法,当然可以自己重写equals()方法,自己写的话可以更符合自己的需求变化,想怎么比就怎么比。

 

==  和equals()的区别

5.1 比较八种基本数据类型时,要使用"==",不能用equals(),此时“==”比较的是左右两边的值是否相等。

       八种基本数据类型:byte、int、short、long、char、float、double、boolean

5.2 比较包装类型时,“==” 比较的是内存地址是否相等,而equals()比较的是值是否相等(在日常使用中最常用到比较String是否相等,这里要用equals方法去比,不能用"==")。

 

实例

举一些例子便于理解。

String s1 = "RoRoBear";
String s2 = "RoRoBear";
String s3 = "RoRoBea";
String s4 = "r";
String s5 = s3 +s4;
String s6 = s3+"r";
String s7 = new String("RoRoBear");
String s8 = new String("RoRoBear");

System.out.println(s1 == s2);  //true
System.out.println(s1.equals(s2));  //true

System.out.println((s1 == s5));  //false
System.out.println(s1.equals(s5));  //true

System.out.println(s1 == s6);  //false
System.out.println(s1.equals(s6));  //true

System.out.println(s1 == s7);  //false
System.out.println(s1.equals(s7));  //true

System.out.println(s5 == s6);  //false
System.out.println(s5.equals(s6));  //true

System.out.println(s5 == s7);   //false
System.out.println(s5.equals(s7));   //true

System.out.println(s7 == s8);  //false
System.out.println(s7.equals(s8));  //true

相信这些如果你都能做对,应该对==和equals已有深刻的理解!

以上!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值