java - 带有最终访问修饰符的 char 和 byte - java

标签 java char byte primitive scjp

请看下面的例子,我无法理解char和byte之间的关系

byte b = 1;
char c = 2;

c = b; // line 1

给我编译错误,因为 c 是 char 类型,b 是 byte 类型,所以在这种情况下必须进行转换

但现在这里的推特是当我在代码下面运行时

final byte b = 1;
char c = 2;

c = b; // line 2

第 2 行编译成功它根本不需要任何转换 所以我的问题是,当我将最终访问修饰符与 byte

一起使用时,为什么 char c 表现不同

最佳答案

因为用 final 限定它使变量成为常量变量,即 constant expression .所以

final byte b = 1;
char c = 2;

c = b; // line 2

实际上变成了

final byte b = 1;
char c = 2;

c = 1;

并且编译器保证值 1 可以放入 char 变量中。

对于非常量 byte 变量,没有这样的保证。 byte is signed, char is unsigned .

关于java - 带有最终访问修饰符的 char 和 byte - java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27044674/

相关文章:

c++ - 加倍到 Const Char*

C 中的 char 数组打印错误值

c - C 中恰好一个字节的位掩码

c - 在C编程中, “emit”做什么?

java - C++:普遍使用 shared_ptr<> 是否等同于 gc?

java - 在单元测试中使用反射是不好的做法吗?

java - 是否可以在Java上编写active-x组件?

java - 如何访问 JAR 文件中的文件夹

java - char类型可以归类为整数吗?

go - Go 比较字节和 rune 的规则是什么?