== 作用:
equals()方法的作用:
public static void main(String[] args) {//基本数据类型的比较int num1 = 10;int num2 = 10;System.out.println(num1 == num2); //true//引用数据类型的比较//String类(重写了equals方法)中==与equals的比较String s1 = "hello";String s2 = "hello";System.out.println(s1 == s2); //true,比较地址值:内容相同,因为常量池中只有一个“hello”,所以它们的地址值相同System.out.println(s1.equals(s2));//true,比较内容:内容相同,因为常量池中只有一个“hello”,所以它们的地址值相同System.out.println(s1.equals("hello")); //trueString s3 = new String("hello");String s4 = new String("hello");System.out.println(s3 == s4); //false,比较地址值:s3和s4在堆内存中的地址值不同System.out.println(s3.equals(s4)); //true,比较内容:内容相同//没有重写equals方法的类中==与equals的比较 People p1 = new People();People p2 = new People();People p = p2;System.out.println(p1);//People@135fbaa4System.out.println(p2);//People@45ee12a7System.out.println(p); //People@45ee12a7System.out.println(p1.equals(p2)); //false,p1和p2的地址值不同System.out.println(p.equals(p2)); //true,p和p2的地址值相同}
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;}
代码解释
1. 若当前对象和比较的对象是同一个对象,即return true。也就是Object中的equals方法。
2. 若当前传入的对象是String类型,则比较两个字符串的长度,即value.length的长度。
3. 若长度不相同,则return false。
4. 若长度相同,则按照数组value中的每一位进行比较。若不同,则返回false。若每一位都相同,则返回true。
5. 若当前传入的对象不是String类型,则直接返回false。
此外StringBuffer和StringBuilder并没有重写equals方法,其比较的还是引用类型的地址。