contains方法原始碼如下:
public boolean contains(object o)其呼叫的indexof方法如下:
public int indexof(object o) elsestring型別的集合:return -1;
}
arraylistnames = new arraylist();contains方法本質上呼叫的indexof方法。在indexof方法中,此時的string型別中的o引數是個多型,o.equals實際呼叫string類中已經重寫後的equals方法。names.add("jim");
system.out.println(names.contains("jim"));
包裝類集合
arraylistages = new arraylist();在integer類中,找到的重寫後的equals方法如下:ages.add(12);
system.out.println(ages.contains(12));
public boolean equals(object obj)在包裝類integer的集合中,雖然呼叫的也是contains方法,但是在底層的源**中呼叫的equals方法與之前不同。這次呼叫的是在integer類中,重寫後的equals方法。輸入的引數經下轉型後,比較值的大小關係。return false;
}
自定義型別集合
自定義乙個student類,如果要呼叫此類的contains方法,必須自己重寫乙個equals方法,源**如下:
package collection;
public class student
@override
public boolean equals(object obj) else }
}
主程式如下:
arrayliststudents = new arraylist();詳細解釋自定義類集合的contains方法呼叫過程。如果不重寫equals方法,則呼叫的將會是object父類中的equals方法,則此時比較的將是新創的兩個student類的位址,而不是學號id。students.add(new student("111"));
system.out.println(students.contains(new student("111")));
public boolean equals(object obj)所以equals方法在自定義中必須重寫,先將傳入的引數下轉型成student類,再定義兩個string的區域性變數,分別儲存傳入引數的id和呼叫引數的id,最後呼叫string類中重寫的equals方法比較兩個string是否相等。
由於是在student類中重寫的equals方法,所以如果傳入的是其他類引數,將其強制轉換就會出現異常。所以必須限制傳入的引數類必須為student類。因此呼叫instanceof關鍵字加以限制,如果沒有限制,則執行以下**,就會出現異常。
arraylistlists = new arraylist();lists.add(new string("111"));
system.out.println(lists.contains(new student("111")));
詳述ArrayList類contains方法
原始碼 contains方法 public boolean contains object o indexof方法 public intindexof object o else return 1 string型別 arraylist names newarraylist names.add tim...
詳述ArrayList類中contains方法
原始碼 contains public boolean contains object o indexof public int indexof object o else return 1 string型別 arraylistnames new arraylist names.add aa sys...
詳述抽象類
在介紹抽象類之前,我們想通過 來引入一下。背景 mammal是whale的父類。double price 9 mammal mammal new whale mammal.move 第一行 中實際上有乙個自動型別轉換的過程,因為9屬於整形,要把他變到更大的double型別就要自動型別轉換。第二三行 ...