java学习之== 和 equals区别

运算符 == 和 equals()的区别

在基本数据类型中 运算符 == 比较的是两个变量的值,equals()方法不能比较基本数据类型,
引用类型的比较,运算符 == 比较的是两个变量的地址,equals()方法比较的也是地址。在Object类中equals的原码也是用的==。

在某些特殊的类中,比如经常使用的String和一些包装类(Integer,Character等),在源码中重写了equals方法,所以其比较的是两个变量的值是否相等。下面的事String的原码,可以看到首先判断两个的地址,如果相等,那么值肯定相等,之后的代码块
if(v1[i] != v2[i])
     return false;
判断两个字符串的内容是否相等。其他的包装类都差不多。

一些例子

1.String 的简单比较。

str1 和 str2 是字符串常量所产生的变量,所以两个变量指向同一个地址。

2.new String()之间的比较

String str1 = new String("abc");
String str2 = new String("abc");
str1 == str2 比较的是二者之间的地址,str1 和 str2 是在堆上new出来的不同地址,所以是false。
str1.equals(str2);比较的是二者之间的值,都是"abc"所以是true.

3.StringBuffer

StringBuffer s1 = new StringBuff("a");
StringBuffer s2 = new StringBuff("a");
StringBuffer类没有重写equals方法,所以其比较的仍然是地址。s1.equals(s2) 返回值是false。

注意:

1.对于基本数据类型不能使用equals() 方法,只能使用 == 运算符

可以看到在强行写equals方法之后会报错,没有这个方法,之后系统提示的方法是Objects.equals(a,b);我查看了一下这个函数的源代码,还是比较a和b的地址。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值