【问题标题】:Compilation error (incompatible types) when using 'byte' primitive type instead of 'int'使用 'byte' 原始类型而不是 'int' 时的编译错误(不兼容的类型)
【发布时间】:2017-10-21 21:34:40
【问题描述】:

由于我的数字非常小(介于 0 和 13 之间),我决定使用 byte 而不是 int 可以带来微小的性能提升。但是,我收到以下编译错误:

错误:(87, 31) 错误:不兼容的类型:从 int 到 byte 的可能有损转换

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

这很奇怪,我想听听你的原因是什么,我错过了什么吗?

【问题讨论】:

  • 为这些参数中的任何一个传递-10 意味着什么?您应该考虑为它们中的每一个使用枚举而不是字节。
  • @AndyTurner 这更像是一个概念问题,而不是实际的项目实施。

标签: java android android-studio primitive-types


【解决方案1】:

以这种方式作为文字提供的文字值的默认类型是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. Literals
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-27
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    相关资源
    最近更新 更多