java学习笔记(六) == 与equals方法

==

如果比较的是基本数据类型,则比较的是他们的内容是否相等,如果比较的是引用数据类型,则比较的是他们的内存地址是否相同;

Object中的equals()方法

作用和== 相同,但是一般对于引用数据类型我们会重写equals方法.Java中String和基本数据类型的包装类型都重写了equals()方法,使得他们比较的是两个对象的内容是否相等.

funny

比较有趣的是== 我们知道用new创建的对象系统会为其重新分配内存空间,所以用两个引用对象如果有一者使用new创建对象,那么他们 == 的结果肯定不等,可如果他们都不是用new创建的,情况就比较复杂了.思考这样两个对象:

String s1="abc ";
String s2="abc ";

那么,s1==s2的结果为假吗?其实其结果为真,这是因为字符串常量池的存在,他们不是用new创建的,那么他们指向的是字符串常量池中同一个字符串,地址自然相等了
那么

Integer i1=56;
Integer i2=56; 
Integer i3=456;
Integer i4=456;

这里的i1== i2吗?i3 == i4吗? 答案是i1 == i2结果为true而i3 == i4的结果为false.为什么会这样呢?Integer中有一个IntegerCache类,我们可以理解为它是提供了一个类似字符串常量池的东西,这个缓冲区里有-128–127的数,所以如果你的Integer对象直接赋值时其数值范围在这之内,它们也是在同一内存空间里的,超过这个范围系统会自动new一个内存空间来存放该对象.由此引申,我们发现Character同样也有这样一块缓冲区,其大小也是在-128–127之间,所以

Character c1='a';Character c2='a';//c1==c2 返回true
Character c3='中';Character c4='中';//c3==c4 返回false
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值