天天看點

基本資料類型之間轉換和基本資料類型裝箱操作

首先給大家一個執行個體,請大家想一下下面代碼的運作結果是什?

package www.lxk.test3;
public class Demo  {
    public static void go(Long n) { 
        System.out.println("Long"); 
    } 
    public static void go(Short n) {
        System.out.println("Short");
    } 
    public static void go(int n) {
        System.out.println("int"); 
    } 
    public static void main(String[] args) {
        short y = 6;
        long z = 7; 
        go(y); 
        go(z); 
    } 
}

           

結果是short long還是:int long呢?

這是我做過的一個面試題,當初做的時候沒有注意到這道題的陷阱,将重載方法go中的參數Short和Long看成了short和long,然後我得出的答案是short long,然後我看了正确答案竟然是int long,當時就懵逼了,但是答案擺在眼前,能怎麼辦?于是我竭盡腦汁想出了一個非常牽強的答案,(因為是錯誤的就不再贅述),

那麼我将int,long的結果解釋一下,這裡首先要明确一下基本資料類型之間的轉化是優于基本資料類型的裝箱操作,是以,y會将自己轉化為int類型之後就進了參數為int類型的go方法,于是便輸出了int,至于long就不解釋了

至于下面的這個圖是我想那個牽強答案的一個論據,雖然我原本的解釋就錯的,但是這個記憶體圖是正确的,就留這兒了

int類型的資料和short類型的資料在記憶體中存儲機制

基本資料類型之間轉換和基本資料類型裝箱操作

因為本人對java的學習還不是特别精通,是以寫的部落格裡面難免有一些錯誤,希望每位讀者能夠挑出我的錯誤,本人将不勝感激.

繼續閱讀