Integer128==128?false

hndjknnjsnjd發表於2018-08-22

Integer 與 int 數值比較?

		
		Integer b1 = 100;
		Integer b2 = 100;
		
		Integer c1 = 1501;
		Integer c2 = 1501;
		
			if(b1==b2) {
				System.out.println("相等");//相等
			}else {
				System.out.println("不相等");
				
			}
		
			
			if(c1==c2) {
				System.out.println("相等");
			}else {
				System.out.println("不相等");//不相等
				
			}

乍一看結果是相等的,其實不然。

 

1,Integer 和 Integer 100 相比較是相等?

2,Integer 和 Integer 127以上 相比較是相等?

答案:

相等

不相等

 

為什麼會這樣子?原因是什麼?我是不是學了假的Java?

通過檢視Integer原始碼發現?

你會發現Integer類內部 通過靜態內部類提供了一個快取池,範圍在-128~127之間,如果超過這個範圍 Integer 值都是new出來的物件,比較的話肯定會出錯!

疑問?為什麼這麼寫Integer原始碼?

Integer快取了-128~127之間的數,這是在類載入期間就完成的。以後需要的時候直接指向它就可以了,省去了構造物件的開支,提高了效率。

只能採用equals 比較!

檢視原始碼Integer equals方法你會發現

 

所以

或者

 

 

同理Long也是一樣

 

相關文章