我的计算机科学课的一个问题就是这个问题。
byte fun = '0';
System.out.println(fun);
答案是48,但我班上没有人知道如何使用它,或者它意味着什么。我们知道字节是什么,但在它们周围有单引号是什么意思?
答案 0 :(得分:2)
任何字符周围的单引号代表字符文字。
' 0'是字符0(其类型为char
)的字面值,其数值为48.可以将其分配给byte
变量而不显式类型转换,因为48是{的有效值{1}}。
答案 1 :(得分:2)
单引号中的值不是byte
,而是char
字面值。 Java将其转换为UNICODE-16数值以进行赋值。
一个人认为引用括起来的字符是一个字节的错误的原因是Java检查值是否在一个字节的范围内,并允许你在不需要时跳过强制转换。对于分配给short
或byte
类型的变量的整数文字也是如此:
byte b = 100;
上面将编译,即使100
是类型为int
的文字,其宽度大于byte
,因为编译器知道实际值适合{{1} }}
对于这样的赋值,这并不普遍:如果使用UNICODE-16值大于128的字符,则会出现编译时错误。
例如,这不会编译
byte
触发错误
错误:不兼容的类型:从char到byte的可能有损转换
答案 2 :(得分:1)
单个刻度用于在Java源代码中编写char值文字。
因此'0'表示char值;并且有一个隐式转换为字节
(请参阅Java - why does char get implicitly cast to byte (and short) primitive, when it shouldn't?了解原因)