equals()与==的区别

相信一定还有很多菜鸟像我一样的对equals与== 的使用和机制含糊不清,只是知道用,而不知道其运行原理,今天对他们做一个总结


(1), ==用于基本类型和引用类型:当用于基本类型时候,是比较值是否相同;当用于引用类型的时候,是比较对象是否相同。

当一个类没有重写equals方法时,调用的是Object类的equals方法,其实现是通过==来比较两个对象的地址。(String类对equals进行了重写)

在API中对equals的描述是:

1.对于任何引用类型, o.equals(o) == true成立.

2.如果 o.equals(o1) == true 成立,那么o1.equals(o)==true也一定要成立.

3.如果 o.equals(o1) == true 成立且 o.equals(o2) == true 成立,那么o1.equals(o2) == true 也成立.

4.如果第一次调用o.equals(o1) == true成立,在o和o1没有改变的情况下以后的任何次调用都成立.

5.o.equals(null) == true 任何时间都不成立.

(2) public static void main(String args[]){
String str1 = "abc";
String str2 = "abc";

String str3 = new String("abc");
String str4 = new String("abc");

}

当用== 比较str1与str2的时候,返回true,在比较str3与str4的时候返回的却是false,同样是String类型的对象为什么会有不同的结果呢,因为

String str1 = "abc";  产生的字符串存在于字符串池中,当声明另一个String str2 = "abc";的时候 拿的是同一个"abc"对象,所以会返回true。

当用equals对str1,str2,str3,str4进行任意比较返回都为true,因为Java重写了String的equals方法,比较的是其值,而不是地址。


(3)综上所述我们会在大多数时候对equals产生不满,因为它无法帮我们比较两个对象是否相同,所以当我们需要的时候就该自己来重写equals方法了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值