equals和==引发的问题

本文详细解析了Java中equals方法与==运算符的区别,通过具体示例解释了两者在字符串比较时的行为差异,尤其强调了字符串常量池的作用。

第一次写着玩意,心情的激动就像万马策奔一样!首先还是自我介绍下吧!我是一名java开发工程师,虽然工作经验不足,但是我相信我会努力前进的!看过很多人写的博客!精彩真的很精彩啊!所以自己大胆的也写一次啊!

因为本人的水平有限啊!只能写写java简单的东西但是也带我自己的观点啊!如有错误的地方,请大家多多指点啊!

相信谈起面试,就会想起面试官的那些熟悉却说不上来的问题吧!我本人面试也不太多吧!但是几乎每次多被问到一个熟悉而且又回答不全的问题,那就是equals和==的本质上的区别:

equals:在javaAPI中说~将此字符串与指定的对象比较。当且仅当该参数不为null,并且是与此对象表示相同字符序列的 String 对象时,结果才为 true。本人理解equals就是比较两个对象的内容是否一样,如果一样则返回true,跟对象的地址没有关系;

==       :对于这个用两个等于号拼起来的运算符就比教复杂了!在比较两个对象时,==运算符比较的是两边对象的内存地址是否一样,如果一样则返回true!

<span style="white-space:pre">		</span>String st = "aaa";
		String st1 = "aaa";
		st.equals(st1);
		st == st1;
上面的st和st1中的值时一样,这大家都应该知道的!但是地址值是不是一样就不知道,这就要说起String,在每次创建一个string类型时!(这里不包括new的)当第一次创建st对象时!在堆里面开辟一个空间,并且给分配一个地址;当下次创建st1值相同时!不会开辟新的空间,而是直接将内存中存在的地址直接给st1,所以st和st1在堆中对应的是同一个地方,固然两个对象的地址也就一样,所以st == st1返回的是true!

<span style="white-space:pre">		</span>String st = "aaa";
		String st1 = new String("aaa");
		st.equals(st1);
		st == st1
在来说说new的String比较有什么不一样吧!虽然st1是new的,但是st和st1两个值也是一样的,固然equals比较出来的肯定是true,这没什么好说的!看看==吧!当第一次给st赋值,在堆中开辟一个空间存放st值!当在创建st1时!因为st1是new出来的,大家都应该知道new的意思吧!就是创建一个新的!相当于有了某个东西,但是我还要买新的!当时在学习这个new的时候,在java中思想就是什么都是对象,而做java这行的单身肯定很多,所以有时候就让单身的人去new一个对象!因为st1是new出来的!在堆中首先是不看其内容是什么,直接就给你在堆中开辟一个空间,顺便给你一个地址存放内容!这样就会导致st1对应一个新的地址值!所以st1==st返回的是一个false!

<span style="white-space:pre">		</span>String st = "aaa";
		String st1 = "a";
		String st2 = "aa";
		st1 += st2;
		st.equals(st1);
		st == st1;

在说说字符串的拼接吧!当st1和st2拼接起来的值赋给st1并且等于st时!用equals比较st和st1时,其内容还是一样的!所以返回的是true!而用==时!虽然都没有new对象,但是当String的值不一样时!也相当于在空间创建一个新的地址,也就是说st1和st2都有自己的新地址!当将st1和st2拼接在一起并且将拼接后的值赋给st1!这时st和st1比较其内存的地址是不同!所以st==st1返回的是一个false!

趁着工作偷闲一会,胡乱的写点,感觉好多废话啊!第一次写,希望大家多多包涵啊!有什么建议请踊跃的施展你们的想法!谢谢奋斗

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值