作者:脉趣小鱼 | 来源:互联网 | 2024-12-14 15:44
在Java编程语言中,'=='操作符用于比较两个对象的引用是否指向同一个内存位置,而'equals'方法则用于比较两个对象的内容是否相等。本文通过具体示例详细解释了两者的差异,并提供了代码演示。
在Java编程中,理解'=='和'equals'之间的区别对于正确处理对象比较至关重要。
概念区分
'=='操作符主要用于检查两个对象引用是否指向同一个内存位置,即它们是否是同一个对象。而'equals'方法则是用来判断两个对象的内容(值)是否相等,这通常涉及到对象内部状态的比较。
代码示例
下面的代码展示了如何使用'=='和'equals'来比较不同情况下创建的字符串对象:
package com.oop.demo06;
public class Demo01 {
public static void main(String[] args) {
String s1 = "yyll"; // 使用字符串常量创建
String s2 = "yyll";
String s3 = new String("yyll"); // 通过new关键字创建
String s4 = new String("yyll");
String s5 = s3;
// '==' 比较的是对象的引用地址
System.out.println("s1 == s2 => :" + (s1 == s2));
System.out.println("s1 == s3 => :" + (s1 == s3));
System.out.println("s3 == s4 => :" + (s3 == s4));
System.out.println("s3 == s5 => :" + (s3 == s5));
System.out.println("==================================");
// 'equals' 比较的是对象的内容
System.out.println("s1.equals(s2) => :" + (s1.equals(s2)));
System.out.println("s1.equals(s3) => :" + (s1.equals(s3)));
System.out.println("s1.equals(s4) => :" + (s1.equals(s4)));
System.out.println("s1.equals(s5) => :" + (s1.equals(s5)));
}
}
执行上述代码后,将得到如下输出结果:
从输出结果可以看出,即使内容相同的字符串,如果它们是由不同的方式创建的,它们的引用地址也会不同。
内存布局如图所示:
总结
- 当使用字符串常量创建字符串时,Java会首先检查字符串池中是否存在相同内容的字符串。如果存在,则不会创建新的对象,而是返回已存在的对象引用;如果不存在,则会在池中创建新对象。
- 使用new关键字创建字符串时,每次调用都会创建一个新的对象,即使内容相同,这些对象在内存中的地址也是不同的。