Java中equals与==的用法

比较一下equals与==的区别,其实这两个还是有共同点的。对于比较而言,一共有两种比较。基本数据类型的比较以及对象引用的比较。

1.基本数据类型的比较(如int,float等类型)

用==比较时,比较这两个数据的数值是否相等。此时不能使用.equals()方法。

2.对对象的引用进行比较时,是比较这两个对象在内存中的地址是否一样。此时equals()方法又有两种情况,如果equals()方法是Object类中的方法(我们自己创建的类都是继承自Object类),此时equals()方法没有被重写,因此它与==的比较是相同的,都是比较的引用的内存地址。比如:

A a1=new A();

A a2=new A();

此时无论是==还是equals进行比较都是false,因为每new一次,创建一个对象,就会在内存空间中开辟一个新的地址空间,因此引用a1与引用a2所指向的是两块不同的内存地址,所以比较结果是false。

此时即便是写成:

A a1=new A(“I am a good student”);

A a2=new A(“I am a good student”);

结果同样是false,因为此时比较的并不是数值,是对象的引用。


3.equals()方法的另外一种情况就是在String,Integer等类中的比较,这些类中重写了equals()方法,使之用于比较数值的大小,而==还是用于比较对象的引用,也就是内存地址。此时两种比较的结果就不一样了。比如:

String s1=new String("I am a good student");

String s2=new String("I am a good student");

此时s1.equals(s2)就是true,而s1==s2就是false。

4.最后一种情况,就是String类型的字符串的比较。比如:

String s1="I am a good student";

String s2="I am a good student";

此时如果比较s1与s2,可以写成是s1==s2或者s1.equals(s2),结果都是true,来分析一下原因。

String是一个类,所以用它创建的字符串变量是类类型的变量,也就是对象。

而I am a good student这个字符串其实是存储在常量池中的一个字符串常量。对于==比较而言,s1跟s2 的引用都是指向的这个字符串常量的地址,因此对==来说,两者是相同的。而对equals()来说,在String中判断,这两个字符串的值是相同的,因此也是true。





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值