==和equals

==  是运算符   equals  是方法  方法可以被重写

== 和  equals  比较的都是地址

举个栗子:

String这个引用类型

在JVM里,考虑到垃圾回收(Garbage Collection)的方便,将heap(堆)划分为三部分:young generation(新生代)、tenured generation (old generation)(旧生代)、permanent generation(永生代)。

字符串为了解决字符串重复问题,生命周期长,存于永生代中。

String str1 = “ABC”;可能创建一个或者不创建对象,如果”ABC”这个字符串在java String池里不存在,会在JVM的字符串池里创建一个创建一个String对象(“ABC”),然后str1指向这个内存地址,无论以后用这种方式创建多少个值为”ABC”的字符串对象,始终只有一个内存地址被分配,之后的都是String的拷贝,Java中称为“字符串驻留”,所有的字符串常量都会在编译之后自动地驻留。

所以String 直接赋值,如果结果一样,那么使用 == 和 equals 比对都是true,这也看出  ==  和 equals  比较的是地址,(==  基本数据类型比较,基本数据类型在方法区,常量池,所以是地址比较)

如果String 是new 出来的对象,那么地址是不相等的,同理如果是自己自定义创建的对象,也不相等

但是String 里面的equls 方法自己写的,比对的是字符串内容,自定的类需要自己处理

equals 比对的是地址,为什么这么讲?因为父类是Object ,如果你充型定义了就不是比对的地址了,例如像String 那样

 

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值