【发布时间】:2015-05-29 00:34:30
【问题描述】:
我在计算机科学课上的一个问题是这个问题。
byte fun = '0';
System.out.println(fun);
答案是 48,但我班上没有人知道如何使用它,或者它意味着什么。我们知道字节是什么,但是在它们周围加上单引号是什么意思?
【问题讨论】:
-
Google 查找 UnicodeTable 并检查其中的索引
0字符(十进制)
我在计算机科学课上的一个问题是这个问题。
byte fun = '0';
System.out.println(fun);
答案是 48,但我班上没有人知道如何使用它,或者它意味着什么。我们知道字节是什么,但是在它们周围加上单引号是什么意思?
【问题讨论】:
0 字符(十进制)
任何字符的单引号代表一个字符文字。
'0' 是字符 0(其类型为 char)的文字,其数值为 48。它可以分配给 byte 变量而无需显式类型转换,因为 48 是byte。
【讨论】:
单引号用于在 Java 源代码中编写 char 值文字。
因此'0'代表一个char值;并且有一个隐式转换为字节
(请参阅Java - why does char get implicitly cast to byte (and short) primitive, when it shouldn't? 了解原因)
【讨论】:
单引号中的值不是byte,而是char 文字。 Java 将其转换为它的 UNICODE-16 数值以进行赋值。
之所以会产生引号括起来的字符是一个字节的错觉,是因为 Java 检查该值是否在一个字节的范围内,并允许您在不需要时跳过强制转换。对于分配给short 或byte 类型变量的整数文字也是如此:
byte b = 100;
即使100 是int 类型的文字(比byte 更宽),上面的代码也会编译,因为编译器知道实际值适合byte。
这样的赋值并非普遍适用:如果您使用 UNICODE-16 值大于 128 的字符,则会出现编译时错误。
例如,这不会编译
byte a = 'ё';
触发错误
错误:不兼容的类型:从 char 到 byte 的可能有损转换
【讨论】: