+ =带字符串和铸造字符的运算符

Coo*_*d12 2 java string casting char

这可能是一个愚蠢的问题,但我找到了一个我无法理解的互动.我认为它与+ =的工作方式有关.

String temp = "";
temp += (char) 90 + 10;
System.out.println(temp); // "100"
temp = "" + (char) 90 + 10;
System.out.println(temp); // "Z10"
Run Code Online (Sandbox Code Playgroud)

Z10很有意义.100没有.我认为第二行将以两种不同的方式之一执行以产生"Z10"或"d".为什么铸件似乎被忽略了?

And*_*ner 5

它与此无关+=.这与+工作方式有关.

如果任一操作数的+IS的String类型,+是字符串并置运算符; 否则,它是数字加法.


temp += (char) 90 + 10; 
Run Code Online (Sandbox Code Playgroud)

是相同的

temp += ((char) 90 + 10);
Run Code Online (Sandbox Code Playgroud)

因此首先评估括号,然后+=应用括号.在这里,既不是(char) 90也不10Strings,所以+是数字加法.

为了进行数字加法,必须使两个操作数兼容 - 这称为二进制数字提升.如果操作数是a char和a int,char则扩展为a int.

因此(char) 90立即扩大回来90; 然后int可以添加两个s - 让步100- 然后可以将其附加到tempString via +=.


另一方面

temp += "" + (char) 90 + 10;
Run Code Online (Sandbox Code Playgroud)

是相同的

temp += (("" + (char) 90) + 10);
Run Code Online (Sandbox Code Playgroud)

因此,它首先评估最内部的括号.

因为""是a String,"" + (char) 90是字符串连接,导致值"Z".那也是一个String; 所以"Z" + 10也是字符串连接,导致"Z10".