2013-07-20 120 views
1
public class Wrap 
{ 
public static void main(String args[]) 
{ 
Integer a =1000; 
Integer b =1000; 
System.out.println(a == b); //line 7 
Integer c = 10; 
Integer d = 10; 
System.out.println(c == d); // line 10 
} 
} 

明白了部分:在第7行是比較參考變量是否指相同的對象或沒有。並且在第10行中比較包裝對象所保持的實際基本數據。包裝自動裝箱

我發現了什麼:如果值是-1​​28到127之間就比較原始值,否則檢查的參考變量是否指的是同一個對象

我的問題:爲什麼會這樣呢?有沒有涉及邏輯?這是任何用途的邏輯?或者是 它只是一種oracle的方式來說明java是如何與其他語言不同的。

+0

1000可能不會這樣做。嘗試'-XX:+ AggressiveOpts' –

+0

由於某種奇怪的原因,存在一些緩存,這就是爲什麼該比較適用於該範圍的原因。 – arynaq

回答

2

瞭解的部分:在第7行中,比較是否引用相同對象的引用變量。

正確

和在管線10其比較該包裝對象保存實際的基本數據。

不,它完全一樣的東西。

我發現了什麼:如果值是-1​​28到127之間,以將比較原始值,否則檢查的參考變量是否指的是同一個對象

這是整緩存默認範圍。其他整數類型和布爾值也是如此。

我的問題:爲什麼這樣呢?

提高性能。

有沒有涉及邏輯?

見Integer.valueOf(int)的

是任何使用的是什麼邏輯?

節省垃圾。

或者它只是一種說oracle如何與其他語言不同的方式。

也許,Sun的想法確實如此。

+0

您可以詳細說明什麼是整數緩存,以及它如何節省垃圾 –

+1

@RohanPujari整數緩存,緩存整數。即不是每次從數組中獲得一個新數據。它通過不每次給你一個新對象並重用它在數組中的對象來節省垃圾。你想這樣做,因爲雖然創建對象很便宜,但要做到這一點並且加起來。不創建對象可以快5倍。 –