参考答案:
==
和 equals()
在 Java 中用于比较对象,但它们的比较方式和用途有所不同。
==
操作符==
是一个 比较运算符,用于比较两个变量的值是否相等。具体来说,它有以下几种用途:
基本数据类型:比较的是两个变量的值是否相同。
int
, char
, float
等基本数据类型,==
比较的是它们的值是否相同。1int a = 5; 2int b = 5; 3System.out.println(a == b); // 输出 true,因为它们的值相等
引用类型:比较的是两个引用是否指向同一个内存地址,也就是判断两个引用是否指向同一个对象。
==
比较的是对象的 内存地址(即对象的引用),而不是对象的内容。1String str1 = new String("hello"); 2String str2 = new String("hello"); 3System.out.println(str1 == str2); // 输出 false,因为它们是不同的对象(不同的内存地址)
equals()
方法equals()
是 Object
类中定义的一个 方法,用于比较两个对象的 内容是否相等。但是,equals()
方法的默认实现是比较对象的引用是否相等(与 ==
相同),所以它通常会被子类重写,用来根据实际需求比较对象的内容。
在 String
类中的实现:String
类重写了 equals()
方法,比较的是字符串的 内容 是否相等。
1String str1 = new String("hello"); 2String str2 = new String("hello"); 3System.out.println(str1.equals(str2)); // 输出 true,因为它们的内容相等
自定义对象的比较:如果你需要比较自定义对象的内容,可以在该类中重写 equals()
方法。重写 equals()
方法时,通常还需要重写 hashCode()
方法,以保证它们的行为一致。
1class Person { 2 String name; 3 int age; 4 5 public Person(String name, int age) { 6 this.name = name; 7 this.age = age; 8 } 9 10 @Override 11 public boolean equals(Object obj) { 12 if (this == obj) return true; 13 if (obj == null || getClass() != obj.getClass()) return false; 14 Person person = (Person) obj; 15 return age == person.age && name.equals(person.name); 16 } 17 18 @Override 19 public int hashCode() { 20 return Objects.hash(name, age); 21 } 22} 23 24Person p1 = new Person("Alice", 30); 25Person p2 = new Person("Alice", 30); 26System.out.println(p1.equals(p2)); // 输出 true,因为它们的内容相同
最近更新时间:2024-12-09