一、字符串比較用compareTo()時:
1,長度相同,從第一位開始比較,如果相同返回0,如果不同則馬上返回這兩個字符的ascii值的差值。
2,長度不同,直接返回長度差值。
二、Integer比較用compareTo()時:
1,對比數字時相同,返回0。
2,對比數字不同時,返回-1。
public int compareTo(Student o) {
return this.age - o.age; // 比較年齡(年齡的升序)
}
應該理解成return (-1)×(this.age-o.age)計算機沒有所謂的正序和逆序,他只管大還是小,你給他小的放前面,大的放后面,然后乘負一,整個順序就反過來了
比如:this.age=23, o.age=24,那么:
this.age - o.age=-1 這樣系統就認為this比o小,所以排在this排在前面,就是升序了;
如果寫成 o.age - this.age 就相當於 -(this.age - o.age)=1,這樣系統就認為this比o大了,所以this排在后面,就是降序了。
更明白的理解就是:
return this.age > o.age ? -1 : 1; 降序排列 等價於 return o.age - this.age
return this.age > o.age ? 1 : -1; 升序排列 等價於 return this.age - o.age