Java中的字符字面量是什么?

9

我刚开始阅读《Java技术手册》,在第一章中它说:

"要在Java程序中包含字符字面量,只需将其放在单引号之间" 例如:

char c = 'A'; 

这个代码段是做什么的?我以为char类型只能接受0-65,535之间的值。我不明白如何将字符'A'赋值给它?

你也可以将字符'B'赋值给int类型变量吗?

int a = 'B'

'a' 的输出为 66。上述操作在哪些场合/原因下会被使用?

如果我的问题很愚蠢,请见谅。

我整个人生都是骗局。

3个回答

10

char实际上是一种整数类型。它存储了所涉及字符的16位Unicode整数值。

你可以看一下http://asciitable.com,以查看不同字符的不同值。


8
不,它存储的是相关字符的UTF-16码元。这样可以处理ASCII码表之外的值... - Jon Skeet
6
在Java中,char是一种整数类型。它是一个无符号的16位整数值。Unicode中的前128个字符代码是ASCII代码,因此可以说 char 存储一个UTF-16代码,该代码可能也是ASCII代码。对于大多数意图而言——如果您不涉及外语或“图形字符”——可以将其视为ASCII。 - Hot Licks
顺便提一句,我相信字符可以通过使用两个字符表示一个码点来表示比16位更大的Unicode码单元。 - Kamil
但是,你为什么想要“存储有问题字符的16位Unicode整数值”呢?那有什么用处? - Adz
@Eggy - 你必须以某种方式存储字符值。否则,你怎么能做到呢? - Hot Licks
显示剩余2条评论

2
如果你查看ASCII表,字符"A"的值是41 hex或65 decimal。使用单引号(')将一个单个字符括起来,就变成了字符字面量。使用双引号(")会使其变成字符串字面量。 将char someChar = 'A';分配给char someChar = 65;是完全相同的。 至于为什么,考虑一下如果你只想查看一个字符串是否包含十进制数字(而且没有方便的函数来执行此操作)。你可以使用类似以下的东西:
bool isDecimal = true;
for (int i = 0; i < decString.length(); i++) {
    char theChar = decString.charAt(i);
    if (theChar < '0' || theChar > '9') {
        isDecimal = false;
        break;
    }
}

2
在Java中,char字面量表示UTF-16(字符编码方案)代码单元。从UTF-16获取的是整数值(及其在内存中保存的方式)与相应字符(单元代码的图形表示)之间的映射。
您可以用单引号括起来字符-这样你就不需要记住所使用的字符的UTF-16值。仍然可以从字符类型获取整数值,并将其放入int类型中(但通常不是short类型,它们都使用16位,但short值为-32768到32767,而char值为0到65535或左右)。

1
有符号的16位整型数(Java short)取值范围为-32768到32767。无符号的16位整型数(Java char)取值范围为0到65535(虽然高端代码点中的一些数字被保留用于特殊目的,因此可表示字符的实际范围要低得多,除非您进入“转义”模式)。 - Hot Licks
谢谢您的纠正。我在头文件中计算了char和short类型的范围 - 现在已经进行了更正。 - Kamil
1
任何合格的程序员都将那些数字记在心里(虽然我必须承认我仍然需要查2147483647)。 - Hot Licks

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接