1.==
==運算符是條件運算符中的一種,接下來將詳細介紹其用法
a.如果兩端都是基本數據類型變量,且都是數值類型,只要變量值相等就返回true(數據類型可以不同)
public static void main(String[] args) {
int num = 97;
char ch = 'a';
System.out.println(ch==num);//true
}
b.兩端都爲布爾類型,值相同返回true,不同返回false(boolean不能和其他任意一種類型比較)
public static void main(String[] args) {
System.out.println(true==true);//true
System.out.println(false==false);//true
System.out.println(false==true);//false
}
c.一個操作數爲基本數據類型,另一個操作數爲引用數據類型不能比較。
public static void main(String[] args) {
int a = 7;
String str = new String();
System.out.println(a==str);//報錯
}
d.如果兩個操作數都是引用數據類型那麼只有當兩個引用變量的類型相同或者具有父子關係時纔可以比較,而且這兩個引用必須指向同一個對象才返回true.
public static void main(String[] args) {
Object obj = new Object();
String str =new String();
List list = new ArrayList();
Object obj1 = str;
System.out.println(obj==str);//false,二者雖具有父子關係,但是不指向同一個對象
System.out.println(obj1==str);//true,二者既具有父子關係,又指向同一個對象
System.out.println(list==str);//報錯
}
2.equals( )方法
equals( )方法是object類提供的一個實例方法,因此所有的引用變量都可以調用該方法來判斷是否與其他引用變量相同,但是該方法比較兩個引用變量時,同樣要求兩個變量指向同一個對象時才返回true,因此object類提供的該方法意義不大(與==一樣),但是可以重寫該方法來實現特定功能。(String的實例調用該方法來判斷兩個字符串是否相等時,儘管指向的對象不一致只要值相同就返回true的原因是,String已經重寫了equals()方法)
可在重寫方法中自定義一個判斷標準,可以模仿String類,自定義一個二者類型相同時,成員變量相同時就返回true的標準
public class Person {
int age;
public Person(int age) {
super();
this.age = age;
}
}
public static void main(String[] args) {
Person p1 = new Person(1);
Person p2 = new Person(1);
System.out.println(p1.equals(p2));//false
}
重寫equals之後
public class Person {
int age;
public Person(int age) {
super();
this.age = age;
}
@Override
public boolean equals(Object obj) {
//如果兩個對象相同返回true
if(this==obj){
return true;
}
//兩個對象類型相同
if(obj!=null && obj.getClass()==Person.class){
Person objP = (Person) obj;
//兩個對象的age屬性相同
if(objP.age==this.age){
return true;
}
}
return false;
}
}
public static void main(String[] args) {
Person p1 = new Person(1);
Person p2 = new Person(1);
System.out.println(p1.equals(p2));//true
}