容易忘记的一件事 == 和 equals到底有什么区别?

作为一个程序员小白,自以为学的已经很好的了,但是在做题时发现这样一道题
String a = “abc”;
String b = “ab”+”c”;
String c = new String(“abc”);
下面返回true的有哪些?(多选)()
A.a == b B. a .equals© C. b == c D. a.equals(new String(b))
无疑是给我吓懵了,突然之间忘了他俩的区别到底是什么了!!!
接下来就让我们重新来认识一下这俩哥们(等等哥一口哥
首先等等哥(==)比较的是内存地址,他是Object类的属性。
然后一口哥(equals)比较的是对象内容,他是Object类的方法。
既然都是Object的东西,然后Object这个类又是最基本的一个类,所以要是知道,Object不会把这两个东西做的十分强大,好让他的子类来重新,重写的是方法,属性没有办法重写所以等等哥的用法基本上用法就是那样了,然后一口哥功能还不能太强大,所以一口哥底层的实现是和等等哥一摸一样的,一口哥没被Object子类重写之前,这哥俩的用法没有任何区别

最后回到这道题

这道题正确答案是 A, B, D
我当时选的ABCD,哎呦,惭愧惭愧
至于为什么不选C呢,那么我们就来解析一下,等等哥比较的是什么!!!
地址值啊,家人们,那么我们就得知道String类型的对象是被虚拟机这家伙存到什么地方的,首先String存储的地方有两个,一个是方法区,一个是对象堆。
分情况而定(什么时候存方法区,什么时候存对象堆)
简单的要死,看看有没有 new 这三个字母,有就在对象堆里边,没有就在方法区里边
那么这道题里面C选项涉及到的 b 和 c 这两个变量有没有 new ,我们发现 c 这个变量其实是 new 出来的,所以 老b 和 老c 根本就不在一个地方,然后等等哥比较的还是地址值,这不差了十万八千里吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值