热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java中'=='与'equals'方法的区别

在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)));
}
}

执行上述代码后,将得到如下输出结果:

技术图片

从输出结果可以看出,即使内容相同的字符串,如果它们是由不同的方式创建的,它们的引用地址也会不同。

内存布局如图所示:

技术图片

总结

  1. 当使用字符串常量创建字符串时,Java会首先检查字符串池中是否存在相同内容的字符串。如果存在,则不会创建新的对象,而是返回已存在的对象引用;如果不存在,则会在池中创建新对象。
  2. 使用new关键字创建字符串时,每次调用都会创建一个新的对象,即使内容相同,这些对象在内存中的地址也是不同的。

推荐阅读
author-avatar
脉趣小鱼
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有