Java equals() 方法总结

Java中的equals方法看似简单,其实也暗藏玄机,当面试中遇到可以是轻松拿分的点,但基础不扎实也很容易答错。今天仔细研究了一下,在此备忘。

首先可以将Java 中的数据分为四大类:1、String;2、非String的普通类;3、Java的基础数据类型 (内置数据类型);4、Java基础数据类型的封装类。 下面针对这四个大类详细解释:


1. 对于String 类型 equals比较的是String 字符串的内容,而“==”比较的是变量地址。换句话说,只有当两者是同一个实例时“==”才可能为true,而equals则只需要两者的值一致即可得到true。以下为示例代码:

String str1 ="abc";

String str2 ="abc";

String str3 =new String("abc");

System.out.println(str1==str2);

System.out.println(str1.equals(str2));

System.out.println(str1==str3);

System.out.println(str1.equals(str3));


其运行结果为:

true,true,false,true


第2和第4个输出结果很明显,然后为什么“str1==str2”是true,而“str1==str3”是false呢?这里是一个易错点。我们分开来看:

1) 其实只要搞清楚“abc”是一个字符串常量,因此str1与str2看似是两个不同的变量,其实都指向常量“abc”,所以他们的地址是一致的。

2) 反观str3,因为它是通过new String("abc");创建的,它是一个新的字符串,因此它们虽然有相同的字符串值“abc”,但它们地址不同。

---------------------------------------------------------------------------


2. 对于非String的普通Java类equals方法和“==”都是比较对象的地址

Person p1 =new Person("wyz", 10);

Person p2 =new Person("wyz", 10);

Person p3 = p1;

System.out.println(p1.equals(p2));

System.out.println(p1==p2);

System.out.println(p1.equals(p3));

System.out.println(p1==p3);

运行结果:

false,false,true,true

---------------------------------------------------------------------------


3. 对于Java中内置的基础数据类型,它们没有equals方法。“==”比较的是他们的值

int a = 1, b =1;

int c = a;

System.out.println(a==b);

System.out.println(a==c);

运行结果:

true,true

---------------------------------------------------------------------------

4.最后,对于Java基础数据类型的封装类,类似String,equals方法比较值,而“==”比较地址

Integer na =new Integer(1);

Integer nb =new Integer(1);

System.out.println(na==nb);

System.out.println(na.equals(nb));

运行结果:

false,true

---------------------------------------------------------------------------


以上主要讨论了Java定义的equals方法,我们其实也可以自行覆写equals方法来达到自己的目的,这里就不详细讨论了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值