请在下面的代码中解释二进制数字促销的逻辑。
boolean flag = 'A' < 'a';
System.out.println(flag);// prints true.
在Java中,char
原始数据类型被定义为16位Unicode字符,其值为十六进制范围,从0x0000
到0xFFFF
。比较两个char
值时,它是使用的16位十六进制值。
在你的特定情况下,A
由0x0041
和a
代表0x0061
,所以'A' < 'a'
将评估为true
。
当您比较两种不同类型(通常是数字)时,它被称为促销,其中一种将转换为另一种,以便进行比较。喜欢:
int x = 5;
double y = 6;
if (x < y)
...
在Java中,int
和double
可以进行比较。在这种情况下,int
将被隐含地转换为double
。
在您的情况下,没有促销。将存储在存储器中的字符作为数字(在Java中基于UTF-16标准存储为恰好2个字节,如short
)和'A' < 'a'
整数中进行比较。