【问题标题】:Java Char addition makes no sense (to me)Java Char 添加没有意义(对我来说)
【发布时间】:2020-03-20 18:43:23
【问题描述】:

所以我这里有这段代码:

char a = '1';
char b = '2';
System.out.println(a+b); \\ Outputs 99

我想知道为什么,因为这段代码:

char a = '1' + '2';

    System.out.println(a); \\ Outputs c

我想增强我的原始思想,请帮助一个志趣相投的人。

【问题讨论】:

  • 每个字符对应一个numeric value,称为codepoint。您的代码实际上是在执行println( (int) a + (int) b )char a = (char) ((int) '1' + (int) '2')。如果要连接字符串,请使用字符串,而不是字符。
  • 我明白了,基本上我将第一个视为 int,第二个视为 char。谢谢,这很有启发性。

标签: java char addition


【解决方案1】:

字符具有真实值; 当你写

char a = 49;
char k = '1'; // both of them holds same character because '1' code in ascii 49

当您在算术运算中处理两个变量并且其中一个类型是(字节、短或字符)时,这些类型在 int 中提升

System.out.println(a+b); // both of them promote int
char c = a + b; // assign c, 99 which represents 'c'

【讨论】:

    【解决方案2】:

    它们被添加为十进制数字 ASCII 值。

    隐式执行a+b 的代码部分是将它们添加为整数。所以,如果你运行以下代码:

    class Example {
        public static void main(String[] args) {
            char ch = '1';
            char ch2 = '2';
            int num = ch;
            int num2 = ch2;
            System.out.println("ASCII value of char " + ch + " is: " + num);
            System.out.println("ASCII value of char " + ch2 + " is: " + num2);
        }
    }
    

    你会看到每个char的输出是

    char 1 的 ASCII 值是:49

    char 2 的 ASCII 值是:50

    所以当你这样做 System.out.println(a+b); 时,它们会作为整数值相加,结果是 99

    【讨论】:

    • 奇怪,我在这里“unicode-table.com/en/#control-character”发现 1 的值为 31,2 的值为 32,将它们相加得到 63 即 'c' ,如果 char 转换 1 也是如此到 61 的“a”字符和 62 的“b”,添加它们对结果没有意义。还是我错过了什么?
    • 那是 Unicode(不是 ASCII)——查看这个表(维基百科)并向下滚动到 Unicode U+0031——你会看到在 ASCII 中,它有一个不同的数字(十进制)值@ 987654322@
    • 哦,我明白了,当我查看 Unicode 时,结果是 ASCII。那就解决了。
    猜你喜欢
    • 2015-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    相关资源
    最近更新 更多