Java中“==”与“equals”的区别和“=”赋值的细节

Java中比较两个对象(这里是统称,包括数据和类,下同)是否相等有两种方法,分别是“==”和“equals()”,对于初学者来说可能不知道为什么会有两种方法,下面我们就来看看。另外一点就是“=”在赋值时需要注意的。

1、“==”与“equals()”的区别

一般来说“”与“equals()”时没有区别的,因为在Object类中“equals()”就是用“”来比较的(Object是所有类的父类),但在有些类中“equals()”方法被重写了,这样就有了区别,有的时候这种重写是必要的。

先来看一串代码

String s1="abc";
String s2="abc";
if(s1==s2)
        System.out.println("s1==s2");

很显然,程序执行后会输出s1==s2,我们换种写法再试一次

String s1="abc";
String s2=new String("abc");
if(s1==s2)
	System.out.println("s1==s2");
if(s1!=s2)
	System.out.println("s1!=s2");
if(s1.equals(s2))
	System.out.println("s1.equals(s2)");
if(!s1.equals(s2))
	System.out.println("!s1.equals(s2)");

这次却输出了s1!=s2,s1.equals(s2),这个结果和我们预期的不太一样。

原因是在程序运行时会创建一个字符串缓冲池,第一次在赋值时程序会在缓冲池中找到“abc”赋值给s1,s2,第二次在赋值时程序也找到“abc”给s1,但s2要一个新的字符串,所以系统找了一个新的“abc”给s2,在用“==”比较时会发现二者不一样,再用“equals()”比较时二者就一样了,这是因为String类重写了“equals()”方法。

2、关于“=”的细节

这个细节不是很重要,了解一下就行。对于基础数据类型,在用“=”赋值时是把实际的值赋给变量,而如果是给数组或者对象等非基础数据类型用"="赋值时是把该对象的地址复制给它,而不是值。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值