如果一个字节在数字周围有单引号 (' '),这意味着什么?

What does it mean if a byte has single quotes ( ' ' ) around a number?

我的计算机科学问题之一 class 有这个问题。

byte fun = '0';
System.out.println(fun);

答案是 48,但我的 class 中没有人知道它的工作原理或含义。我们知道字节是什么,但是用单引号括起来是什么意思?

任何字符周围的单引号表示一个字符文字。

'0'是字符0(其类型为char)的文字,其数值为48。它可以分配给一个byte变量而无需显式类型转换,因为48 是 byte.

的有效值

单刻度用于在 Java 源代码中写入 char 值文字。

因此'0'代表一个char值;并且有一个隐式转换为 byte

(请参阅 Java - why does char get implicitly cast to byte (and short) primitive, when it shouldn't? 了解原因)

单引号中的值不是 byte,而是 char 文字。 Java 将其转换为 UNICODE-16 数值进行赋值。

人们产生引号括起的字符是一个字节的错觉的原因是 Java 检查值是否在一个字节的范围内,并允许您在不需要时跳过转换。对于分配给类型 shortbyte:

的变量的整数文字也是如此
byte b = 100;

即使 100int 类型的文字,它比 byte 更宽,但上面的代码将编译,因为编译器知道实际值适合 byte.

对于这样的赋值,这并非普遍适用:如果您使用 UNICODE-16 值大于 128 的字符,则会出现编译时错误。

例如,这不会编译

byte a = 'ё';

触发错误

error: incompatible types: possible lossy conversion from char to byte