【30、 == 和 equals】

94 阅读1分钟

在Java中,==和equals都用于比较两个对象是否相等,但它们的比较方式有所不同。

==用于比较两个对象的引用是否相同,即它们是否指向同一个内存地址。如果两个对象的引用相同,则它们相等,否则它们不相等。例如:

String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");
System.out.println(str1 == str2); // true
System.out.println(str1 == str3); // false

在上面的例子中,str1和str2都是指向字符串常量池中同一个对象的引用,所以它们相等;而str3是通过new关键字创建的新的对象,所以它们的引用不同,所以不相等。

equals方法用于比较两个对象的内容是否相同。默认情况下,equals方法与==的行为相同,即只比较两个对象的引用是否相等。但是,可以通过重写equals方法来改变其比较方式,使其比较对象的内容。例如:

String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");
System.out.println(str1.equals(str2)); // true
System.out.println(str1.equals(str3)); // true

在上面的例子中,由于String类重写了equals方法,所以它们比较的是对象的内容,即它们包含的字符序列是否相等,所以它们相等。

综上所述,==比较的是对象的引用,equals比较的是对象的内容。对于基本类型,==比较的是它们的值,而不是引用。在使用equals方法时,建议先检查对象是否为null,再进行比较,以避免NullPointerException异常。