java-字符串和字符的串联

以下语句,

String string = "string";   

string = string +((char)65) + 5;
System.out.println(string);

产生输出string70


但是,以下内容

String string = "string";

string += ((char)65) + 5;
System.out.println(string);

生产string70

区别在哪里?

Tiny asked 2019-11-06T22:26:17Z
5个解决方案
70 votes

您会因为操作符优先级和字符串转换的组合而看到此行为。

JLS 15.18.1指出:

如果只有一个操作数表达式的类型为String,则对另一操作数执行字符串转换(第5.1.11节),以在运行时生成字符串。

因此,第一个表达式中的右侧操作数将隐式转换为字符串:string += ((char)65) + 5;

但是,对于第二个表达式,必须将2602842207073073862656和2608842207073862657以及+一起考虑。由于+=+弱,因此首先评估+运算符。 那里我们有一个char和一个int,该整数将二进制提升为+=。只有然后才对+=进行求值,但是此时已经对涉及2602842207073073862665的表达式的结果求值了。

Kai Sternad answered 2019-11-06T22:26:48Z
16 votes

情况1

string = string +((char)65) + 5;

一切都视为字符串,但在第二种情况下

执行的操作顺序:

  • string + 70A = string70A
  • string + 70A = string70A

情况二

 string += ((char)65) + 5;

计算出第一个右手侧意味着第一次操作将如string + 70A = string70A,因此((char)65) + 5 is 70的结果以及之后的+ =运算。

执行的操作顺序:

  • string + 70A = string70A
  • string + 70A = string70A

让我们再看一个例子

String string = "string";
string += ((char)65) + 5 + "A";
System.out.println(string); 

输出串70A

原因计算相同的第一个右手侧,执行的操作顺序为

  • string + 70A = string70A
  • string + 70A = string70A
  • string + 70A = string70A
Ashish Aggarwal answered 2019-11-06T22:27:45Z
5 votes

当你写:

string = string + ((char)65) + 5;

就像写:

String string =
     new StringBuilder(string).append((char)65).append((int)5).toString();

就像将string附加到A(十进制65的char表示)和5一样。

在后者中,您首先要计算右手,然后将结果添加到string,就像编写:

string = string + 70;
Maroun answered 2019-11-06T22:28:22Z
3 votes
string = string +((char)65) + 5;

这意味着“将字符串设置为((char)65)+5charstring的串联”。 从左到右对此进行评估(因此首先是2602844425558558688771,然后是+5,然后是字符串和整数的串联,则将该整数转换为字符串。

string += ((char)65) + 5;

这意味着“计算结果((char)65)+5并将其添加到字符串中”-在将结果添加到字符串之前先评估整个右侧。 由于char实际上只是一个16位整数,因此将它们作为整数相加(给出70),然后将其附加到string

Michael Madsen answered 2019-11-06T22:28:58Z
0 votes

与示例相同:

System.out.println("abc"+10 + 5);

产生abc105(添加为字符串)

System.out.println(5 + 10);

产生15(作为数字添加)

操作的(第一位)包含的String在执行操作时会强制将所有元素视为Strings。 但是,在您使用+=的情况下,由于运算符的优先级,该操作首先在右侧部分执行(将元素处理为int),然后与String并置。

arjacsoh answered 2019-11-06T22:29:35Z
translate from https://stackoverflow.com:/questions/20515911/concatenation-of-strings-and-characters