==equals 在 Java 中有着不同的作用和使用场景:

  1. == 是一个操作符,用于比较两个对象的引用是否相同。如果两个对象引用同一个内存地址,则 == 返回 true;否则返回 false。在比较基本数据类型时,== 比较的是它们的值是否相等。
  2. equals 是一个方法,用于比较两个对象的内容是否相等。通常情况下,如果类没有重写 equals 方法,则 equals== 的作用是相同的,即比较对象的引用是否相同。但是,可以通过重写 equals 方法来改变比较的方式,使其比较对象的内容而不是引用。在 Object 类中,equals 的默认实现就是比较对象的引用。

举个例子:

String str1 = "hello";
String str2 = "hello";

System.out.println(str1 == str2);      // true,因为字符串常量池会确保相同的字符串只有一个实例
System.out.println(str1.equals(str2)); // true,因为它们的内容相同

String str3 = new String("hello");
String str4 = new String("hello");

System.out.println(str3 == str4);      // false,因为它们是不同的对象实例
System.out.println(str3.equals(str4)); // true,因为它们的内容相同

StringBuilder sb1 = new StringBuilder("hello");
StringBuilder sb2 = new StringBuilder("hello");

System.out.println(sb1 == sb2);      // false,因为它们是不同的对象实例
System.out.println(sb1.equals(sb2)); // false,StringBuilder 类没有重写 equals 方法

Integer num1 = 100;
Integer num2 = 100;

System.out.println(num1 == num2);      // true,因为对于 Integer 类型,-128 到 127 之间的值会被缓存
System.out.println(num1.equals(num2)); // true,因为它们的值相同

Integer num3 = 200;
Integer num4 = 200;

System.out.println(num3 == num4);      // false,因为超出了缓存范围,会创建新的对象实例
System.out.println(num3.equals(num4)); // true,因为它们的值相同