使用 'byte' 原始类型而不是 'int' 时出现编译错误(类型不兼容)

Compilation error (incompatible types) when using 'byte' primitive type instead of 'int'

由于我的数字很小(在 0 到 13 之间),我决定使用 byte 而不是 int 可以带来一个微小的性能改进。但是,我收到以下编译错误:

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

这里是 Card class 构造函数的基本部分,看起来恰到好处,两个参数都需要字节:

这很奇怪,我想听听你是什么原因,我是不是漏掉了什么?

以这种方式作为文字提供的文字值的默认类型是 int,将值转换为 byte。喜欢,

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

声明局部值来保存参数(Java 编译器将允许这样做,因为它是一个 声明 ) 喜欢

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

Elliott 是正确的 @Serj 但这不是限制。 JAVA 允许方法重载(名称相同但参数数量和类型都不同的方法),这非常有用。这意味着您可以有另一个 Card (int suit, int rank) 形式的 Card 构造函数。因为您指定了一个字面值,在这种情况下默认是一个整数,所以编译器查找 Card (int, int) 的定义。找不到所以编译失败。