據說這個面試題目,80%的程式員都會理直氣壯的回答錯誤!!
一: ==運算子
- 如果比較的是基本資料型別,則直接比較數值是否相等,回傳值為“true or false”
- 如果比較的是參考資料型別,則直接比較地址值是否相等,回傳值為“true or false”
二: Object類中的equals()方法:
- Object類中的equals方法比較的是參考資料型別,比較的的是地址值是否相等,“回傳true or false”
- 如果子類有重寫了equals方法,例如String型別,則直接比較類中的屬性,回傳"true or false"
三:==運算子運用舉例:
public class Comparea {
public static void main(String[] args) {
int i1=10;
int j1=10;
System.out.println(i1==j1);//==運算子的比較使用
int i=10;
char a=10;
System.out.println(i==a);//char型別已經轉換成了相應的ASCII碼值,所以輸出true
A1 a1=new A1(2,"男");
A1 a12=new A1(2,"男");
System.out.println(a1==a12);//==比較的是地址值,與根父類Object一樣
}
}
class A1{
private int age;
private String name;
A1(int age,String name){
this.age=age;
this.name=name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
true
true
false
四:子類重寫Object類中的equals()方法運用舉例
public class Comparea {
public static void main(String[] args) {
A1 a1=new A1(2,"男");
A1 a12=new A1(2,"男");
System.out.println(a1==a12);//==比較的是地址值,與根父類Object一樣
System.out.println(a1.equals(a12));//此時的equals方法子類已經重寫了,只比較類中的屬性
}
}
class A1{
private int age;
private String name;
A1(int age,String name){
this.age=age;
this.name=name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public boolean equals(Object obj) {//向上轉型,把子類的物件賦給父類的參考,通過父類的參考呼叫,子類重寫了的父類中的方法
if(this==obj) {//this關鍵字就是表示當前類的物件
return true;
}
if(obj instanceof A1) {//obj instanceof A:關鍵字的作用就是判斷
//obj 是否是A1這個類的物件,或者其子類的物件
A1 a1=(A1)obj;//再通過向下轉型,去呼叫A1類中的方法
return this.age==a1.age&&this.name.equals(a1.name);
}return false;
}
false
true
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/243812.html
標籤:java
