java - 无法从 int 转换为 byte

标签 java casting integer byte

我有一个相当简单但对我来说令人困惑的问题。 假设字节变量 a、b、c:

byte a = 5;
byte b = 3;
byte c = a + b; // wont compile

第 3 行无法编译,因为 - 我想 - Java 必须在幕后进行计算,并且计算的结果是一个整数。如果没有显式转换,则无法将整数传递给字节。所以应该提供 (byte)(a+b) 。但现在假设有第四行代码显式转换为整数...

c = (int) 8 ; // compiles

虽然字节变量“c”被显式转换为整数,但它仍然可以编译。 Java 是如何处理这方面的......?

最佳答案

您没有看到的是 a+b 是一个运行时操作,而 byte b = (int)8;是一个编译时操作。因此,在编译时,编译器知道常量 8 可以放入一个字节中。因此,到 (int) 的显式转换被忽略。带或不带 (int) 字节码没有区别。

现在,在第一种情况下,如果两个字节变量都是final(即常量),那么编译器将允许这样做:

public static void main(String[] args) {
    final byte a = 5; // constant
    final byte b = 3; // constant
    byte c = a + b; // WILL compile;

}

关于java - 无法从 int 转换为 byte,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30594985/

相关文章:

java - InitialDirContext.search() 结果错误

java - 继承Java super.print()不返回值

arrays - 这些类型不应该密切相关吗?

c++ - 在 C++ 中,如何获取格式为 "######"的字符串并将每个字符存储为整数?

java - 如何在 Activity 开始时将按钮置于按下状态?

java - 请一点正则表达式帮助 - 第 2 部分

lambda - 将 F# func 转换为 Expression<Func<..,..>>

haskell - 有没有在 Haskell 中使用自然数的实用方法?

c - 为什么在使用 int 变量时会收到警告,而在使用整数常量时却不会?

java - SOAP 请求中的数据处理程序