Java中equals与==的区别解析
版权申诉
18 浏览量
更新于2024-09-05
收藏 56KB PDF 举报
"Java语言中,`equals()`方法和`==`运算符是两种常见的用于比较对象的方法,但它们在用途和行为上有着显著的区别。`==`运算符主要用于比较基本类型(如int, char)的值是否相等,而对于引用类型(如对象),它比较的是两个引用是否指向内存中的同一位置,即对象的地址。这意味着,如果两个引用指向堆中的不同实例,即使这两个实例的内容完全相同,`==`也会返回`false`。
`equals()`方法则是对象的比较方法,通常用于比较对象的内容是否相等。默认情况下,`equals()`方法的行为与`==`相同,但是许多类(尤其是`String`类)重写了`equals()`方法,以便比较对象的内容而不是引用。例如,在`String`类中,`equals()`会比较两个字符串的字符序列是否一致。
来看一个具体的例子:
1. 当我们创建两个`String`对象`s1`和`s2`,并给它们赋值为"Monday",如:
```java
String s1 = "Monday";
String s2 = "Monday";
```
此时,由于字符串字面量的优化,JVM会将"Monday"存入常量池,并且`s1`和`s2`都指向这个相同的引用,因此`==`比较会返回`true`:
```java
System.out.println(s1 == s2); // 输出: true
```
2. 如果我们使用`new String("Monday")`创建`s2`,情况就会有所不同:
```java
String s1 = "Monday";
String s2 = new String("Monday");
```
现在,`s1`仍然指向常量池中的"Monday",而`s2`则是在堆中创建了一个新的`String`对象,虽然内容相同,但它们是两个不同的对象,所以`==`比较返回`false`:
```java
System.out.println(s1 == s2); // 输出: false
```
然而,由于`s1`和`s2`的内容都是"Monday",它们的`equals()`方法比较会返回`true`:
```java
System.out.println(s1.equals(s2)); // 输出: true
```
总结来说,`==`在对象比较时关注的是引用是否相同,而`equals()`关注的是对象的内容是否相等。在编写代码时,应当根据需要比较的内容选择合适的方法。对于自定义类,如果需要基于对象内容的比较,应重写`equals()`方法并确保与`hashCode()`方法保持一致,以符合Java集合框架的约定。
2021-11-23 上传
2023-03-25 上传
2023-05-25 上传
2023-06-03 上传
2023-06-10 上传
2023-05-11 上传
2023-05-26 上传
2023-05-23 上传
2023-05-24 上传
yanyu111112
- 粉丝: 0
- 资源: 4万+
最新资源
- C++多态实现机制详解:虚函数与早期绑定
- Java多线程与异常处理详解
- 校园导游系统:无向图实现最短路径探索
- SQL2005彻底删除指南:避免重装失败
- GTD时间管理法:提升效率与组织生活的关键
- Python进制转换全攻略:从10进制到16进制
- 商丘物流业区位优势探究:发展战略与机遇
- C语言实训:简单计算器程序设计
- Oracle SQL命令大全:用户管理、权限操作与查询
- Struts2配置详解与示例
- C#编程规范与最佳实践
- C语言面试常见问题解析
- 超声波测距技术详解:电路与程序设计
- 反激开关电源设计:UC3844与TL431优化稳压
- Cisco路由器配置全攻略
- SQLServer 2005 CTE递归教程:创建员工层级结构