栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java-String中equals()方法与“==“比较字符串的区别

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java-String中equals()方法与“==“比较字符串的区别

String

当我们对String类型进行操作时,往往都会用到equal()方法比较两个字符串的内容是否相等,那么问题来了,为什么我们能不能用"=="判断2个字符串内容是否相等呢?

实践是检验真理的唯一标准 代码
public static void main(String[] args) {
		// TODO Auto-generated method stub
		String str="aaa";
		String str_01="aaa";
		System.out.println(str==str_01);
		System.out.println(str.equals(str_01));
		String str_02="bbb";
		System.out.println(str==str_02);
		System.out.println(str.equals(str_02));
		String str_03=new String("aaa");
		System.out.println(str==str_03);
		System.out.println(str.equals(str_03));
	}
结果

分析

通过上述代码,我们可以发现str= =str_01和 str= =str_03的值截然不同,前者为true 后者为false,但两者的内容都是aaa,这是为什么呢?而调用equals()方法得到的两次结果都是true,这又是为什么呢?equals()方法与==在判断字符串是否相等时,究竟有何区别?
其实,这涉及到堆栈区以及字符串池的知识。

堆栈和字符串池


当str=“aaa” 代码被执行时,str的变量名存储在栈区,在字符串池中就会开辟一个空间存储aaa字符串的地址(内容),当str_01=“aaa"该行代码被执行时,也会在字符串池中存储"aaa”,但是字符串池首先会判断当前池中是否已经存在str_01需要存储的内容(排斥),很显然,已经存在,则不会再开辟空间让str_01存储,而是直接使用之前的存储值(地址).
所以显而易见,此时 str和str_01都共同指向一个地址 ,所以str和str_01可以理解为同一个东西,因此无论用==还是调用equal方法 肯定都为true,毕竟不可能自己都不是自己吧,哈哈。

再看该图片,因为str=“bbb"代码执行时,“bbb"在字符串池中没有对应的字符串,因此新开辟一个空间存储字符串bbb。所以,很明显的可以看出,str和str_02指向了不同的地址,所以当使用”= =“判断是否相等时候,结果当然为false,毕竟一个是用玻璃杯装的水,另一个是用塑料杯装的酒,材料都不一样,怎么可能相等。当然equals()方法也为false,毕竟一个装水,另一个装酒,总不能说酒是水吧。

str_03=new String(“aaa”)改行代码的执行过程其实分为两步,第一步会先在字符串池中存储"aaa”(蓝色部分),当然也遵循之前讲的规律,因为已存在,所以不再开辟空间存储。第二步:因为使用了new关键字,依次最后会在堆区开辟一个空间存储字符串"aaa”,从而str_03指向堆区,很明显str和str_03指向了不同地址,因此“= =”的结果肯定为false,那equlas()是true还是false呢?当然为true,因为它只需要管str和str_03中装的是什么东西,不管他们是由什么制作的。

创建了几个字符串对象?

对于创建了几个字符串对象,最简单的方法就是我们只需要看字符串池和堆中有几个字符串即可,例如下面图中则有3个字符串对象

public static void main(String[] args) {
		// TODO Auto-generated method stub
		String str="aaa";
		String str_01=new String("bbb");
		System.out.println(str==str_01);
		System.out.println(str.equals(str_01))
	}


初学String类,若有错误,还望谅解并给予指出,谢谢。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/340609.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号