本文共 1980 字,大约阅读时间需要 6 分钟。
a.如果比较的是基本数据类型,则直接比较其存储的值是否相等。
int i = 10;int j = 10;System.out.println(i ==j);
b.如果比较的是引用类型的变量,则比较的是所指向的对象的地址。
String s1 = "hello";String s2 = "hello";System.out.println(s1 == s2);
如果没有对equals方法进行重写,它和==的作用是一样的。
/**** Object.java中equals的实现**/public boolean equals(Object obj) { return (this == obj);}
重写equals方法后可以实现两个对象"值"相等。重写equals方法时需要重写hashCode方法。
为什么重写equals需要重写hashCode?
java中对象的比较有如下规定:为了保证equals相等时对象hashcode必须相等,一般重写equals方法时需要重写hashCode方法。
下面以学生为例来演示重写equals和hashCode方法。
class Student { private String name; private int age; public Student(String name, int age) { this.age = age; this.name = name; } public int getAge() { return age; } public String getName() { return name; } public void setAge(int age) { this.age = age; } public void setName(String name) { this.name = name; } /** * 姓名和年龄都相等才相等 * @param obj * @return */ @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Student other = (Student) obj; if (age != other.age) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + age; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; }}public class EqualsDemo { public static void main(String[] args) { Student stu1 = new Student("name1", 20); Student stu2 = new Student("name1", 20); //两个对象 false System.out.println("stu1 == stu2 : " + (stu1 == stu2)); //值相等 true System.out.println("stu1.equals(stu2) : " + stu1.equals(stu2)); }}
运行结果:
stu1 == stu2 : falsestu1.equals(stu2) : true
转载地址:http://qecmb.baihongyu.com/