判斷位址相同為什麼基本型別可以比較內容

2021-10-08 21:29:46 字數 908 閱讀 1806

實際是位址分配問題。(==永遠是比較位址)

基本型別都是存在棧裡面的,int a=3;當你int b=3的時候,jvm會幹嘛呢?首先,它會去棧裡面找是不是已經有乙個資料為3了。如果不是的話新建乙個位址,是的話,就把b指向這個位址,所以對於基本型別來說,當值相同的時候,位址也是相同的,所以當你對基本型別的時候,內容相同的肯定返回的是true。。因為實質上,他們的位址也是相同的

但是對於其他型別,都是存在堆裡面的動態分配記憶體,所以每一次新建乙個資料都會動態分配乙個記憶體位址,所以的時候,當然記憶體位址是不一樣的。

要記住,==永遠是用來比較記憶體中的位址的,基本型別感覺上是在比較內容,實際上還是在比較位址!

比如下面這個例子

integer i1 = 20;

integer i2 = 20 ;

system.out.println(i1 == i2); // true

integer i3 = 200;

integer i4 = 200 ;

system.out.println(i3 == i4); // false

integer i1 = 20; 其實是乙個自動裝箱的過程,編譯器會自動展開成integer i = integer.valueof(20);詳情可以看integer.valueof的源**,可以看到引數的值在integercache.low(預設-128) 到 integercache.high(預設127)範圍內時(比如20),會從integercache.cache中直接取(此處參考integer的內部類integercache的源**,如果不配置的話,預設是cache儲存-128到127的integer),所以取到的都是同乙個integer的物件,因此相同。而200不在-128到127範圍內,所以會new 乙個新的integer,故不相同。

B樹為什麼具有相同的深度?

b樹的 行為導致了b樹具有相同的深度。不過要清楚的知道這一點,要從 節點從0到節點變滿,到第一次有分層,知道深度不斷增大的流程開始,直接上圖 首先是乙個空的根節點 然後第一次有了第乙個關鍵字 由於其節點元素大小不是我的觀察重點,所以用e代替,用 代表空 假如我們的b樹最小度數為t,那麼一直插入關鍵字...

為什麼同時需要IP位址和MAC位址

每個乙太網裝置在出廠時都有乙個唯一的mac位址,為什麼還需要為每台主機再分配乙個ip位址?或者說每台主機都分配唯一的ip位址,為什麼還要在網路裝置 如網絡卡,集線器,路由器等 生產時內嵌乙個唯一的mac位址呢?主要原因有以下幾點 1 ip位址的分配是根據網路的拓樸結構,而不是根據誰製造了網路設定。若...

有了MAC位址,為什麼還要IP位址

有了mac位址,為什麼還要ip位址?隨著網路裝置的增多,路由選擇變得困難 路徑多,計算量大 因此將網路劃分為多個子網。在路由選擇的過程中,將乙個子網看作乙個整體,路由器只需要選擇到達這個子網的路徑,到達之後的事情就交給子網內部了。雖然這樣的路徑選擇只能保證區域性最優不能保證全域性最優,但大大減少了路...