2013-10-19 79 views
-1
public class Tester { 
    public Tester(){ 
     System.out.println("Hello"); 
    } 

    public Tester(byte b){ 
     System.out.println("byte"); 
    } 

    public Tester(int i){ 
     System.out.println("int"); 
    } 

    public static void main(String[] args) { 
     Tester test=new Tester(12); 
    } 
} 

請告知爲什麼打印爲int,我也試過其他整數,它們都印刷如int,但是,例如,1 2 3 4 5 6 7個....這些數字也可以被稱爲字節,對嗎?那爲什麼只調用int?int或字節混亂

回答

1

12的默認類型是int,所以它選擇了int構造函數。

致電byte構造函數顯式轉換是必需的。

但是如果我刪除:public Tester(int i){System.out.println(「int」); }, 它不會打印字節要麼,相反,它有一個錯誤

如果刪除int構造函數,那麼編譯器將無法找到任何合適的構造函數調用,因此這將是錯誤。

+1

我認爲你需要修改你的答案從** int方法**到int構造函數** – SpringLearner

+0

@javaBeginner done –

+0

看看我提供的例子。如果你刪除整型構造函數並創建一個長整型,那麼它仍然可以工作。 –

5

默認情況下,除非你的類型,如果你想獲得字節然後做如下

Tester test=new Tester((byte)12); 

輸出字節強制轉換爲字節

它將接受爲INT

2

"An integer literal is of type long if it ends with the letter L or l; otherwise it is of type int."

因此,您的12int

它繼續說:「整型字節,short,int和long的值可以從int文字創建。」例如:

byte b = 100; 
short s = 10000; 

然而10010000總是鍵入int。它們恰好與其他類型的分配兼容。

+0

但如果我刪除:public Tester(int i){0} {0} {0} System.out.println(「int」); },它不會打印字節,相反,如果你刪除了public Tester(int i){System.out.println(「int」);那麼它有一個錯誤 –

+0

@peiwang。那麼它將不會編譯 – SpringLearner

+1

您添加或刪除的代碼無關緊要。 '12'總是*一個'int'。所以如果你有一個接受'int'的方法或構造函數,它會編譯。如果你不這樣做,它不會。 –