java介面學習筆記 1. 抽象類和抽象方法 抽象方法:abstract void f(); 抽象類:包含抽象方法的類稱為抽象類。如果一個方法包含一個或多個抽象方法,則該類必須被定義為抽象類,否則編譯器會產生錯誤消息。 示例: public abstract class Basic { abstra ...
// 測試代碼
public static void main(String[] args) { Integer a = 1; Integer b = 2; Integer c = 3; Integer d = 3; Integer e = 128; Integer f = 128; Long g = 3l; System.out.println(c == d); System.out.println(e == f); System.out.println(c == (a+b)); System.out.println(c.equals(a+b)); System.out.println(g == a+b); System.out.println(g.equals(a+b)); }
輸出結果:
true false true true true false
原因:
1.記憶體地址對比,但是由於值處於-128~127,因此存儲在常量池中,記憶體地址相同
2.記憶體地址對比,由於值不在-128~127,因此值存儲在堆中,記憶體地址不同
3.遇到運算符+號,自動拆箱為int類型對比,值相同
4.調用Integer的equals方法,遇到+號,自動拆箱為int類型的3,傳入equals方法,自動裝箱為Integer類型的3,進行值對比,具體可查看Integer類型的equals方法源碼,值相同
5.遇到運算符+ 號,自動拆箱為int,與Long類型對比,自動轉型為long(編譯時),自動拆箱為long類型對比,值相同
6.遇到運算符+ 號,自動拆箱為int,傳入equals方法,自動裝箱為Integer類型的3,不屬於Long類型,具體可查看Long類型的equals方法源碼,返回false
解釋一下==和equals的區別
定義 | 對於基本數據類型 | 對於引用數據類型 | |
== | 運算符 | 對比值 | 對比記憶體地址 |
equals | Object類的方法 | - | 使用==對比,可以看下Object類下的equals方法源碼 |
附上源碼:
Object equals方法
Integer equals方法
Long equals方法
另外自動轉型:
源碼:
編譯後: