由於我的數字是相當小(0至13之間),我決定使用字節,而不是INT可能帶來的時候性能提高很小。然而,我發現了以下編譯錯誤:編譯錯誤(不兼容類型)使用「字節」原始類型,而不是「詮釋」
Error:(87, 31) error: incompatible types: possible lossy conversion from int to byte
這裏是卡類的構造函數,這似乎是恰到好處的重要組成部分,需要字節兩個參數:
這很奇怪,我想知道你是什麼原因,我是否錯過了什麼?
由於我的數字是相當小(0至13之間),我決定使用字節,而不是INT可能帶來的時候性能提高很小。然而,我發現了以下編譯錯誤:編譯錯誤(不兼容類型)使用「字節」原始類型,而不是「詮釋」
Error:(87, 31) error: incompatible types: possible lossy conversion from int to byte
這裏是卡類的構造函數,這似乎是恰到好處的重要組成部分,需要字節兩個參數:
這很奇怪,我想知道你是什麼原因,我是否錯過了什麼?
以這種方式提供的文字值默認類型爲int
,將值轉換爲byte
。像,
Card card = new Card((byte) 1, (byte) 12);
或聲明局部值來保存參數(Java編譯器將允許這一點,因爲它是一個聲明)像
byte suit = 1;
byte rank = 12;
Card card = new Card(suit, rank);
是的,我知道這些工作。但是,我對這個限制背後的想法感興趣。你能否提供一些我可以閱讀的參考資料? –
@SerjArdovic [JLS-3.10。文字](https://docs.oracle.com/javase/specs/jls/se7/html/jls-3.html#jls-3.10) –
艾略特是正確的@Serj但不是限制。 JAVA允許方法重載(同名的方法,但在數量和類型上都有不同的參數),這是非常有用的。這意味着你可以有另一個Card形式的Card構造函數(int suit,int rank)。由於您指定了一個字面值,並且在這種情況下缺省爲整數,編譯器會查找Card(int,int)的定義。它無法找到,所以編譯失敗。
對於這些參數中的任何一個來說,傳遞「-10」是什麼意思?你應該考慮使用每個枚舉的枚舉而不是一個字節。 –
@AndyTurner這更多的是一個概念性問題,而不是實際的項目實施。 –