编译错误(不兼容类型)使用“字节”原始类型,而不是“诠释”
由于我的数字是相当小(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这更多的是一个概念性问题,而不是实际的项目实施。 –