对于基本数据类型来说,直接比较值是否相等;
对于引用数据类型(类、接口、数组)来说,比较是否是同一对象(地址是否相同)
equals() 是Object类的方法,比较的是对象是否相同;
Object: public boolean equals(Object obj) { return (this == obj); }
如果需要比较值是否相同,则需要重写equals()方法
例如String类的equals方法
String: public boolean equals(Object anObject) { if (this == anObject) { // 首先比较引用对象的地址 return true; } if (anObject instanceof String) { //该实例是否属于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; }
测试下
撸代码:
@Test public void testString(){ System.out.println("基本数据类型:"); System.out.println(1 == 1); // true System.out.println('a' == 'a'); //true System.out.println("引用数据类型:"); String s1 = new String("hello"); String s2 = new String("hello"); System.out.println(s1 == s2); // false System.out.println(s1.equals(s2)); //true String类中equals()方法被重写 System.out.println("自定义类 重写equals()方法:"); Person na2 = new Person(12, "na"); Person na1 = new Person(12, "na"); System.out.println(na1 == na2); // false System.out.println(na1.equals(na2)); //true,如果不重写equals方法。默认是从Object类继承过来的方法,则返回false }
自定义类重写equals方法
自定义类: class Person{ int age; String name; public Person(int age, String name) { this.age = age; this.name = name; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Person person = (Person) o; return age == person.age && Objects.equals(name, person.name); } @Override public int hashCode() { return Objects.hash(age, name); } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)