字符串和字符的串联

2021/01/17 09:21 · java ·  · 0评论

以下语句,

String string = "string";   

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

产生输出stringA5


但是,以下内容

String string = "string";

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

产生string70

区别在哪里?

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

JLS 15.18.1指出:

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

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

但是对于第二个表达式,必须string += ((char)65) + 5;+=复合赋值运算符与一起考虑+由于+=比弱+,因此+首先评估运算符。那里有一个char和一个int,导致将二进制数值提升int仅然后+=评估,但此时+已经评估了涉及运算符的表达式的结果

情况1

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

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

执行的操作顺序:

  • string +((char)65 = stringA
  • stringA + 5 = stringA5

情况二

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

右手边的计算意味着第一个运算将是((char)65) + 5,因此((char)65) + 5 is 70+ =运算的结果。

执行的操作顺序:

  • (char)65 + 5 = 70
  • string + 70 = string70

让我们再看一个例子

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

输出串70A

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

  • (char)65 + 5 = 70
  • 70 + "A" = 70A
  • string + 70A = string70A

当你写:

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

就像写:

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

就像附加stringA(十进制65的char表示)和5

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

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

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

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

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

与示例相同:

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

产生abc105(作为字符串添加)

System.out.println(5 + 10);

产生15(作为数字添加)

所述String包括在(第一地点)的操作力的所有元素被视为Strings在执行该操作。+=但是,在您的情况下,int由于运算符优先级,操作首先在右侧部分执行(将元素处理为),然后与串联String

本文地址:http://java.askforanswer.com/zifuchuanhezifudechuanlian.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!