前言
大家在写代码的时候经常需要比较两个数据是否相同,有的时候会发现使用“==”即可,但有的时候却发现不行,需要使用equals()方法,那么到底是怎么一回事儿呢,今天就和大家说道说道。
一、==
符号
1.1、基本数据类型
当所判断的数据类型为基本数据类型的时候,使用==
符号,只要两个变量的数值相等,即为true。例如:
int a = 5;
if(a==6){...}//所以显然5和6是不相等的,所以无法运行
1.2、引用数据类型
当所判断数据类型是引用类型数据时,使用==
符号,用来判断符号两边数据是否指向同一个对象,只有指向同一个对象时,才返回true。例如:
Person p1 = new Person();
Person p2 = new Person();
System.out.println(p1==p2);
//输出结果为false,因为两者在堆里指向不同的对象,也即指向不同的地址
这里要强调一点:使用==
时,符号两边的数据类型必须兼容,否则编译会出错。
二、equals()方法
1、方法简介
所有的类都继承了Object类,也就获得了equals()方法,当然也可以在每个类中,重写equals()方法。
//格式:
obj1.equals(obj2);
但,对诸如File、String、Date及包装类(Wrapper Class)来说,是比较类型及内容是否相同,而不考虑引用的是否是同一个对象。原因在于:这几个类中都重写了equals()方法。因此,当自定义类使用equals()时,也可以重写equals()方法,达到自己的目标。
2、重写equals()方法
重写原则如下:
三、==与equals()方法
1.==
既可以比较基本数据类型也可以比较引用数据类型。对于基本数据类型就是比较数值;对于引用数据类型就是比较内存地址。
2.equals()方法,属于Object类的方法,若该方法没有被重写过,与==
符号作用相同;而经常使用的String类中的equals()方法,是被重写过的,因此是比较两者的内容。
3 具体要看自定义类里有没有重写Object的equals方法来判断。
4 通常情况下,重写equals方法,会比较类中的相应属性是否都相等。