2017-10-21 70 views
-1

由於我的數字是相當小(0至13之間),我決定使用字節,而不是INT可能帶來的時候性能提高很小。然而,我發現了以下編譯錯誤:編譯錯誤(不兼容類型)使用「字節」原始類型,而不是「詮釋」

Error:(87, 31) error: incompatible types: possible lossy conversion from int to byte

Compilation error

這裏是卡類的構造函數,這似乎是恰到好處的重要組成部分,需要字節兩個參數:

Card class constructor

這很奇怪,我想知道你是什麼原因,我是否錯過了什麼?

+1

對於這些參數中的任何一個來說,傳遞「-10」是什麼意思?你應該考慮使用每個枚舉的枚舉而不是一個字節。 –

+0

@AndyTurner這更多的是一個概念性問題,而不是實際的項目實施。 –

回答

3

以這種方式提供的文字值默認類型爲int,將值轉換爲byte。像,

Card card = new Card((byte) 1, (byte) 12); 

聲明局部值來保存參數(Java編譯器將允許這一點,因爲它是一個聲明)像

byte suit = 1; 
byte rank = 12; 
Card card = new Card(suit, rank); 
+0

是的,我知道這些工作。但是,我對這個限制背後的想法感興趣。你能否提供一些我可以閱讀的參考資料? –

+0

@SerjArdovic [JLS-3.10。文字](https://docs.oracle.com/javase/specs/jls/se7/html/jls-3.html#jls-3.10) –

1

艾略特是正確的@Serj但不是限制。 JAVA允許方法重載(同名的方法,但在數量和類型上都有不同的參數),這是非常有用的。這意味着你可以有另一個Card形式的Card構造函數(int suit,int rank)。由於您指定了一個字面值,並且在這種情況下缺省爲整數,編譯器會查找Card(int,int)的定義。它無法找到,所以編譯失敗。

相關問題