Java 字符串和字符的串联
以下声明Java 字符串和字符的串联,java,string,string-concatenation,Java,String,String Concatenation,以下声明 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 区别在哪里?案例1 string = string +((char)65) + 5;
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
区别在哪里?案例1
string = string +((char)65) + 5;
string += ((char)65) + 5;
String string = "string";
string += ((char)65) + 5 + "A";
System.out.println(string);
除第二种情况外,所有内容都被视为字符串
执行的操作顺序:
string+((char)65=stringA
stringA+5=stringA5
string = string +((char)65) + 5;
string += ((char)65) + 5;
String string = "string";
string += ((char)65) + 5 + "A";
System.out.println(string);
计算第一个右侧意味着第一次操作将类似于((char)65)+5
,所以((char)65)+5的结果是70
,然后是+=操作
执行的操作顺序:
(char)65+5=70
string+70=string70
string = string +((char)65) + 5;
string += ((char)65) + 5;
String string = "string";
string += ((char)65) + 5 + "A";
System.out.println(string);
输出string70A
原因
计算相同的第一右侧,并执行操作顺序
(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();
string = string + 70;
这类似于在A
(十进制65的字符表示)和5
后面追加string
在后者中,首先计算右手,然后将结果添加到string
,这类似于编写:
String string =
new StringBuilder(string).append((char)65).append((int)5).toString();
string = string + 70;
这意味着“将字符串设置为string
、((char)65)
和5
的串联”这将从左到右进行计算(因此首先string+((char)65)
,然后+5
,字符串和整数的串联将该整数转换为字符串
string += ((char)65) + 5;
这意味着“计算
((char)65)+5的结果并将其添加到字符串中”-在将结果添加到字符串之前对整个右侧进行求值。由于字符实际上只是一个16位整数,它将它们作为整数相加-得到70-然后将其附加到字符串中,情况与示例相同:
System.out.println("abc"+10 + 5);
生成abc105(添加为字符串)
及
生成15(添加为数字)
操作(第一个位置)中包含的字符串
强制所有元素在执行操作时被视为字符串
。但是,在使用+=
的情况下,操作首先在右侧部分执行(将元素视为int
)由于运算符优先级,然后与字符串
连接,您可以看到此行为是运算符优先级和字符串转换组合的结果
国家:
如果只有一个操作数表达式为String类型,则在运行时对另一个操作数执行字符串转换(§5.1.11),以生成字符串
因此,第一个表达式中的右操作数将隐式转换为字符串:string=string+((char)65)+5;
但是对于第二个表达式string+=((char)65)+5;
复合赋值运算符必须与+
一起考虑。因为+=
比+
弱,所以首先计算+
运算符。在这里我们有一个字符和一个int,它会导致一个toint
。只有在+=
之后才会计算,但在这个时候涉及+
运算符的表达式的结果已计算的时间。那么,它是否与运算符优先级有关?是的,始终根据运算符优先级执行运算。+=在完成右侧计算后,这些类型的运算符将被解决。