Java基础||“==”和“equals”的区别是什么?

8 篇文章 1 订阅
3 篇文章 0 订阅

谈谈“==”和“equal”的区别是什么?

==:对于基本类型是进行的比较,对于引用类型是进行引用的比较,因为==本质上是对内存地址进行比较。
equals:equals默认是进行引用的比较,一般情况,我们需要将equals进行重写变成值的比较
代码示例如下:

String x = "HelloWorld";
String y = "HelloWorld";
String z = new String("HelloWorld");
System.out.println(x==y); // true
System.out.println(x==z); // false
System.out.println(x.equals(y)); // true
System.out.println(x.equals(z)); // true

x和y都属于基本类型,使用**进行比较时,比较的是值,所以为true**。
而z属于
引用类型==,x和z比较的引用地址不是同一个,因此为false
使用equals时,比较的是引用的值

从JVM角度来看

从JVM角度来看,

  1. 执行String x = "HelloWorld"时;是将基本类型“HelloWorld”放入了字符串常量池中,并赋值给x;
  2. 执行String y = "HelloWord"时;常量池中已经存在“HelloWorld”,则将池中的“HelloWorld”赋值给y,所以此时的x和y中的“HelloWorld”是同一个对象。
  3. 执行String z = new String(“HelloWorld”)时;这条语句是新建了一个对象,储存在JVM的堆中,因此此时的“HelloWorld”和xy中的“HelloWorld”对象不同,因此内存地址也不同。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值