问答题1037/1053== 和 equals 的区别是什么?

难度:
2021-11-02 创建

参考答案:

==equals() 在 Java 中用于比较对象,但它们的比较方式和用途有所不同。

== 操作符

== 是一个 比较运算符,用于比较两个变量的值是否相等。具体来说,它有以下几种用途:

  1. 基本数据类型:比较的是两个变量的值是否相同。

    • 对于 int, char, float 等基本数据类型,== 比较的是它们的值是否相同。
    • 例如:
      1int a = 5; 2int b = 5; 3System.out.println(a == b); // 输出 true,因为它们的值相等
  2. 引用类型:比较的是两个引用是否指向同一个内存地址,也就是判断两个引用是否指向同一个对象。

    • 对于对象,== 比较的是对象的 内存地址(即对象的引用),而不是对象的内容。
    • 例如:
      1String str1 = new String("hello"); 2String str2 = new String("hello"); 3System.out.println(str1 == str2); // 输出 false,因为它们是不同的对象(不同的内存地址)

equals() 方法

equals()Object 类中定义的一个 方法,用于比较两个对象的 内容是否相等。但是,equals() 方法的默认实现是比较对象的引用是否相等(与 == 相同),所以它通常会被子类重写,用来根据实际需求比较对象的内容。

  1. String 类中的实现String 类重写了 equals() 方法,比较的是字符串的 内容 是否相等。

    • 例如:
      1String str1 = new String("hello"); 2String str2 = new String("hello"); 3System.out.println(str1.equals(str2)); // 输出 true,因为它们的内容相等
  2. 自定义对象的比较:如果你需要比较自定义对象的内容,可以在该类中重写 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