Java 当转换为整数时,构成整数值1到96的字符符号是什么?

Java 当转换为整数时,构成整数值1到96的字符符号是什么?,java,char,int,Java,Char,Int,当我在java中将字母字符从char转换为int时,我按字母顺序将值97转换为122 int a = (char) 'a'; //97 int b = (char) 'b'; //98 ... 当转换为int时,字符值是什么?给出值1到96?一级近似值,1 Javachar表示Unicode字符。Unicode是一个标准,它定义了一组字符,每个字符都有一个唯一的整数值,即它的“代码点” Unicode代码点通常以十六进制(以16为基数)编写,前导零足够多,因此它们至少有四个十六进制数字长。在前

当我在java中将字母字符从
char
转换为
int
时,我按字母顺序将值
97
转换为
122

int a = (char) 'a'; //97
int b = (char) 'b'; //98
...
当转换为
int
时,字符值是什么?给出值
1
96

一级近似值,1 Java
char
表示Unicode字符。Unicode是一个标准,它定义了一组字符,每个字符都有一个唯一的整数值,即它的“代码点”

Unicode代码点通常以十六进制(以16为基数)编写,前导零足够多,因此它们至少有四个十六进制数字长。在前面加上一个
U+
,因为,Unicode.:-)因此,例如,整数值65通常写为
U+0041
41
,因为4×16+1=65)

要找出U+0041表示的字符-即代码点为整数值65的字符-可以在中查找。或者,你可以。无论哪种方式,您都会发现它代表大写字母
'A'

或者,您可以这样写:

char character0041 = (char) 65;
System.out.println(character0041);
您将看到它打印一个
A

后一种方法的几个注意事项:

  • 许多Unicode字符实际上并不代表您可能在纸上书写的字符。例如,换行符由Unicode字符表示;如果您试图将这些打印到屏幕上,您将看不到打印的内容,因为打印换行符的效果是,只移动到下一行
  • 新的Unicode字符是定期定义的。有许多可能的值当前未使用,也有许多值保证永远不会使用。因此,如果您试图打印其中一个字符,Java将不会打印任何有用的内容
  • 您的控制台可能不支持全部Unicode字符。如果您试图打印一个整数值大于127的字符,您可能会发现它打印的是胡言乱语。(但话说回来,它可能比这更聪明。试试看!)

脚注:

  • 我说“一级近似”,因为Java
    char
    s只升到U+FFFF,而最大的Unicode码点是U+10FFFF(大17倍)。其工作方式是,Unicode定义了一系列称为“代理”的代码点,这些代码点保证永远不会是字符。然后有一个叫做UTF-16的复杂方案,用于使用这些未分配的码点对来表示
    char
    范围之外的字符。但幸运的是,Java程序员通常不需要担心这一点

  • Java使用的字符集被称为“Unicode”(特别是“UTF-16”,但这对于现在来说太详细了)。“Unicode”是一种基于“ASCII”()的方案,但Unicode允许(大量)更多字符

    因此,为了理解Unicode,理解ASCII是很有帮助的

    ASCII最初是在20世纪60年代早期作为电传打字式通信的代码开发的。它由7个数据位和一个(可选)奇偶校验位组成。因此,ASCII字符的值介于0和127之间(可以用7位表示)

    前32个组合是“控制字符”(如“回车符”、“换行符”、“制表符”,我们将其识别为
    '\r'
    '\n'
    '\t'
    )。此外,all-One组合通常被视为控制字符,留下95个可能的“图形”字符(如果将“空格”计算为图形)

    字符分组排列,“空格”作为最小值的图形(0x20)和一些标点字符(
    !“#$%”()*+,-./
    )之后。从0x30开始的是数字0-9。从0x41开始的是大写A,大写字母在0x5A连续到Z。然后小写字母运行0x61到 0x7A.剩余的标点符号和非数字、非字母字符填充剩余的空格


    Unicode与ASCII的不同之处在于,虽然它完全包括ASCII作为前128个字符的位置,但单个Unicode字符可以占用16或32位。这意味着,不仅可以表示斯堪的纳维亚语言中使用的重音字符,甚至可以表示中日语言的复杂图形除非java字符代表了UTF16代码单元而不是ASCII字符。这两个集合在0~127范围内是一致的,但一个好的答案可以明确地解释这一点,并且解释它们不一致的范围(甚至更大)。你是否考虑过<代码> Soop.Out.PrtLn((char)96)。?(我看不出这个问题怎么是“一个简单的印刷错误”。这是一个有效的问题,证明了许多新手程序员所缺乏的洞察力。)@HotLicks:我同意你不应该一下子涉过所有的麻烦,但我从你那里得出了相反的结论:我认为只有在熟悉Unicode的基本知识之后,才应该提到并理解ASCII。我们老前辈认为Unicode是一种扩展的ASCII,但对于第一语言是Java的新手来说,Unicode是(或应该是)简单/正常/常见的情况,而ASCII是(或应该是)一个技术脚注。(当然,这并不意味着需要立即理解Unicode的所有细节!)