如果没有重写Object类中的equals方法, equals方法和==号比较引用数据类型无区别, 看Object类中equals方法的JDK源码(其实底层就是==实现的)!
提供两个学生JavaBean类, 一个没重写equals方法, 一个重写equals方法:
Student1类:
package org.lxy.javase_2; /** * @author menglanyingfei * @date 2017-3-9 */ public class Student1 { private String name; private int age; public Student1() {} public Student1(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Student [name=" + name + ", age=" + age + "]"; } }Student2类: package org.lxy.javase_2; /** * @author menglanyingfei * @date 2017-3-9 */ public class Student2 { private String name; private int age; public Student2() {} public Student2(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Student [name=" + name + ", age=" + age + "]"; } /** * 重写equals()方法 */ public boolean equals(Object object) { if(object instanceof Student2) { Student2 s = (Student2) object; return this.getName() == s.getName() && this.getAge() == s.getAge(); } return false; } } 比较程序: package org.lxy.javase_2; /** * @author menglanyingfei * @date 2017-3-9 */ public class ComparisonOfReferenceDataTypes { /** * @param args */ public static void main(String[] args) { Student1 s1 = new Student1("Java", 19); Student1 s2 = new Student1("Java", 19); System.out.println("未重写equals方法前:"); System.out.println(s1 == s2); // false System.out.println(s1.equals(s2)); // false Student2 s3 = new Student2("Java", 19); Student2 s4 = new Student2("Java", 19); System.out.println("重写equals方法后:"); System.out.println(s3 == s4); // false System.out.println(s3.equals(s4)); // true } }3. 判断定义为String类型的s1和s2是否相等:
首先, String类中自己已经重写了equals方法, 看下面的JDK源码:
通过JDK提供的API,查看String类的说明, 我们可以知道:
1. 字符串字面值”abc”也可以看成是一个字符串对象; 2. 字符串是常量,一旦被赋值,就不能被改变。 此处比较特别, String类虽然是引用数据类型, 但new的对象, 是在堆中开辟空间, 而字符串常量值则存储在内存中的常量池. package org.lxy.javase_2; /** * @author menglanyingfei * @date 2017-3-9 */ public class ComparisonOfString { /** * @param args */ public static void main(String[] args) { String str1 = "abc"; String str2 = "abc"; System.out.println(str1 == str2); // true System.out.println(str1.equals(str2)); // true } } 本文地址: http://blog.csdn.net/menglanyingfei/article/details/60966018 本文源自: http://blog.csdn.net/menglanyingfei 希望大家能多多评论和指点我的文章, 以相互交流和学习, 也欢迎大家到我的博客里看看对您有帮助的文章, 也欢迎转载,但希望在明确位置注明超链接的出处! 谢谢!