=
= 是赋值运算符 = 在哪里都是赋值符号,给变量赋值用。
//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
以上!