1.基本数据类型的包装类使用equals方法
注意:基本数据类型没有equals方法,判断是否相等使用"=="
//例如
Integer a = 6;
Integer b = 5;
String f = "5";
System.out.println(a.equals(b));
equals源码如下
/*当使用a.equals(b)的时候,会默认调取a类型所对应的equals的方法
(a是Integer类型则调用Integer.class下的equals方法,b是Long类型,则会调用Long.class下的equals方法),
然后对b进行判断,先判断b的类型是否和a一样(如果不是则直接返回false),然后在判断a的值与b的之是否相等。
*/
public boolean equals(Object obj) {
//判断b的类型是否与a的类型相等
if (obj instanceof Integer) {
//在判断两个值是否相等
return value == ((Integer)obj).intValue();
}
return false;
}
2.引用数据类型使用equals
例子
String c = "ab";
String d = "ab";
//这里创建c的会在常量池中创建,在创建d的时候,则会先从常量池中搜索是否有对应的字段,有的话则直接引用,没有则会创建。
//c和d创建的引用数据类型是常量池的同一个,所以其虚地址也相同,所以可以用"=="来判断是否相等。
System.out.println(c==d); //true
String a = new String ("ac");
String b = new String ("ac");
//这种方式则创建两个具有不同虚地址的"ac"对象,所以不能用"=="来判断是否相等
System.out.println(a==b); //flase
//会重写equals方法
System.out.println(a.equals(b));//true
源码如下:
public boolean equals(Object anObject) {
//先判断其虚地址是否相等,相等直接返回true
if (this == anObject) {
return true;
}
//判断比较的类型是否是String类型
if (anObject instanceof String) {
String anotherString = (String)anObject;
//获取比较字段的长度
int n = value.length;
//判断相比较的两个字段长度是否相等
if (n == anotherString.value.length) {
//分别把两个字段放到char数组当中
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
//循环两个char类型数组,判断每个字符是否相等
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}