=、==、===、equals()的区别

=

= 是赋值运算符      = 在哪里都是赋值符号,给变量赋值用。

//JS
//定义一个变量并赋初值为RoRoBear
var name = "RoRoBear"; 

 

==

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

或者这么说吧:

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

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

 

===

===  一般在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()的区别

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

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

 比较包装类型时,== 比较的是内存地址是否相等,而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

 

以上!

 

posted @ 2019-05-23 21:45  Mr_NullPointer2333  阅读(423)  评论(0编辑  收藏  举报