Java中的“==”和equals的区别

“==”和equals方法的究竟有什么区别?

  • “==”:操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存所存储的数值是否相等,要比两个基本的数据或两个引用变量是否相等,只能用“==”操作符。
    如果一个变量指向的数据是一个对象类型,那么,这时候就会涉及到了两块内存,其一:对象本身占用一块内存(堆内存),其二:变量也占用一块内存。例如:Object obj = new Object();变量obj是一个内存,new Object()开辟了另一个内存。此时,变量obj所对应的内存中的数值就是对象占用的那块的内存的首地址。对于指向对象类型的变量,如果要比较两个变量是否指向同一个对象,既要看这两个变量所对应的内存中的数值是否相等,这时候就需要用“==”操作符进行比较。

  • equals方法用于比较两个对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的对象是独立的。例如:对于下面的代码

    String a = new String("foo");
    String b = new String("foo");

这里如果使用表达a.equals(b),返回的是true;如果使用表达式a==b返回的false;
因为:这里的两条new语句创建了两个对象,然后用a,b这两个变量分别指向了其中的一个对象,这是两个不同的对象,它们两的首地址是不相同的,所以a和b中存储的数值是不相同的。因此,表达式a==b返回的是false,而这两个对象的内容是相同的,所以表达式a.equals(b)返回的是true.

扩展:关于String s==null 和string.equals(“”)的区别
在进行“==”或者equals()判断时,会先进行赋值
String s = null: 建立一个s对象,但是这个对象未指向任何的引用
String s =“”:建立一个s对象,而且这个对象指向了一个(“”)空的字符串

  • 如果是:String s = null;之后再进行判断,那么
    s==null:true
    s==“”;false
    e.equals(“”):这里会抛出异常,因为equals是对这个对象指向的引用做的判断,可是s没有指向任何引用。
  • 如果是:String s=“”之后再进行判断
    s==null:false
    s==“”:true
    e.equals(“”):true

下图更加直观地体现了“==”和equals()的区别
这里写图片描述


引申:hashcode

1、如果两个对象相等,那么他们一定有相同的哈希值(hash code)。
2、如果两个对象的哈希值相等,那么这两个对象有可能相等也有可能不相等。(需要再通过equals来判断)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值