Java中equals与==的区别解析
版权申诉
168 浏览量
更新于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-04 上传
2021-12-06 上传
2021-10-11 上传
2021-11-21 上传
2021-11-25 上传
yanyu111112
- 粉丝: 0
- 资源: 4万+
最新资源
- MATLAB实现小波阈值去噪:Visushrink硬软算法对比
- 易语言实现画板图像缩放功能教程
- 大模型推荐系统: 优化算法与模型压缩技术
- Stancy: 静态文件驱动的简单RESTful API与前端框架集成
- 掌握Java全文搜索:深入Apache Lucene开源系统
- 19计应19田超的Python7-1试题整理
- 易语言实现多线程网络时间同步源码解析
- 人工智能大模型学习与实践指南
- 掌握Markdown:从基础到高级技巧解析
- JS-PizzaStore: JS应用程序模拟披萨递送服务
- CAMV开源XML编辑器:编辑、验证、设计及架构工具集
- 医学免疫学情景化自动生成考题系统
- 易语言实现多语言界面编程教程
- MATLAB实现16种回归算法在数据挖掘中的应用
- ***内容构建指南:深入HTML与LaTeX
- Python实现维基百科“历史上的今天”数据抓取教程