编译错误(不兼容类型)使用“字节”原始类型,而不是“诠释”

问题描述:

由于我的数字是相当小(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这更多的是一个概念性问题,而不是实际的项目实施。 –

以这种方式提供的文字值默认类型为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) –

艾略特是正确的@Serj但不是限制。 JAVA允许方法重载(同名的方法,但在数量和类型上都有不同的参数),这是非常有用的。这意味着你可以有另一个Card形式的Card构造函数(int suit,int rank)。由于您指定了一个字面值,并且在这种情况下缺省为整数,编译器会查找Card(int,int)的定义。它无法找到,所以编译失败。