Java sysout中的concat char给出了奇怪的输出?

Java sysout中的concat char给出了奇怪的输出?,java,char,concat,Java,Char,Concat,当我运行下面的代码时,它不会给我被排除的输出。考虑下面的代码片段: public class T { public static void main(String arg[]) { char a='3'; System.out.println(a+a); } } 这里的输出是:102 谁能给我解释一下吗?a+a被解释为一个公式 由于“3”的ascii值为51,51+51=102。它只是ascii值的总和。运算符应用隐式类型转换,将两个字符

当我运行下面的代码时,它不会给我被排除的输出。考虑下面的代码片段:

public class T
{
    public static void main(String arg[])
    {
        char a='3';
        System.out.println(a+a);
    }
}
这里的输出是:102


谁能给我解释一下吗?

a+a被解释为一个公式


由于“3”的ascii值为51,51+51=102。

它只是ascii值的总和。运算符应用隐式类型转换,将两个字符转换为数字ascii表示形式,即51

那么这个表达呢

'3'+'3'
也可视为

51 + 51
也就是102

我假设您想要的是结果
“33”
,它不再是一个字符,而是一个字符串。例如,要实现这一点,您可以将表达式的结果隐式转换为字符串:

char c = '3';
string s = "" + c + c;
另一种可能是简化StringBuilder类:

char c = '3';
String s = new StringBuilder().append(c).append(c).toString();

您可以将c+c视为51+51,因为它采用ascii码“3”。 如果要打印33,则可以尝试以下操作:

System.out.println(String

.格式(“%c+%c”,c,c))

您应该查看一下的规范,顺便说一句,字符实际上是表示UTF-16的16位无符号整数(范围为000000-00007F,与ascii匹配)。