package per.songhongkang.chapter4.day08;
public class TestEquals {
public static void main(String[] args) {
TestEquals tst1=new TestEquals();
tst1.test1();
// equals();1)只能处理引用类型变量;2)在Object类中,发现equals()仍然比较的是两个引用变量的地址值是否相等
// java.lang.Object类,是所有类的根父类;
// 源码:Object类:public boolean equals(Object obj) {
// return (this == obj); }
//
Person1 p1=new Person1();
Person1 p2=new Person1();
System.out.println(p1.equals(p2));//false
System.out.println(p1==p2);//false,与上面等价
//像String、包装类、File类、Date类这些重写Object类的equals()方法。
//比较的是两个对象的“实体内容”是否完全相同。
String str1=new String("AA");
String str2=new String("AA");
System.out.println(str1.equals(str2));//true why:因为String类重写了equls()方法
}
public void test1(){// ==
// 1.基本数据类型:根据基本数据类型的值判断是否相等。相等则返回true.反之,返回false.
// 注:两端数据类型可以不同。在不同的情况下,也可返回true.
// 2.引用数据类型:比较引用类型的地址值是否相等。
int i=12;
int j=12;
System.out.println(i==j);//true
char c=12;
System.out.println(i==c);//true
float f=12.0F;
System.out.println(i==f);//true
int k=65;
char a='A';
System.out.println(k==a);//true
Object obj1=new Object();
Object obj2=new Object();
System.out.println("obj1:"+obj1+"\t"+"obj2:"+obj2);
//输出结果:obj1:java.lang.Object@6406c7e obj2:java.lang.Object@6f92c766
System.out.println(obj1==obj2);//false
Person1 p1=new Person1();
Person1 p2=new Person1();
Person1 p3=p1;
System.out.println(p1==p2);//false
System.out.println(p1==p3);//true
}
}
class Person1{
}
String类中重写equals方法的源码为:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}