2017-10-09 207 views
-2
class Practice { 
    public static void aMethod (int val) { System.out.println("int"); } 
    public static void aMethod (short val) { System.out.println("short"); } 
    public static void aMethod (Object val) { System.out.println("object"); } 
    public static void aMethod (String val) { System.out.println("String"); } 

    byte b = 9; 
    Practice.aMethod(b); // first call My guess:don't know? it is short but why 
    Practice.aMethod(9); // second call My guess:int correct 
    Integer i = 9; 
    Practice.aMethod(i); // third call My guess: Object correct 
    Practice.aMethod("9"); // fourth call My guess: String correct 
} 

爲什麼用byte(b)作爲參數調用的方法調用short?爲什麼帶有byte參數的方法調用short的方法,爲什麼不是int?

+5

最窄的適用類型。 'short'比'int'更接近'byte'。 –

+0

爲什麼編譯器在完全適合短時使用int參數?只是節省了內存 – Tyler

+0

是的,我也這麼認爲,原因是來自哪種類型更接近,但我不知道謝謝@LouisWasserman。該死的,已經-2點哦。 – valer

回答

1

Java會自動爲您的類型選擇最適用的方法。

在這種情況下,您提供了一個byte,這是最小的數據類型。所有數據類型轉換看起來像:

  • int - 可能,直接轉換從byteint
  • short - 可能,直接轉換從byteshort
  • String - 不可能,byte沒有String(需要使用解析方法)
  • Object - 可能的,從byte轉換爲ByteObject

現在,Java會自動選擇轉換爲最窄類型

轉換爲Object贊成intshort,因爲它引入了一個整體對象,開銷很大。

最後選擇short代替int,因爲它是較小。 A byte適用於short,本身適合int

  • byte - 從-2^(7)2^(7)-1
  • short - 從-2^(15)2^(16)-1
  • int - 從-2^(31)2^(31)-1

Ranges of data-types

(的差越大但那麼你不會看到圖像中的任何東西)

相關問題