Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 字符串和字符的串联_Java_String_String Concatenation - Fatal编程技术网

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
案例2

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,它会导致一个to
int
。只有在
+=
之后才会计算,但在这个时候涉及
+
运算符的表达式的结果已计算的时间。

那么,它是否与运算符优先级有关?是的,始终根据运算符优先级执行运算。+=在完成右侧计算后,这些类型的运算符将被解决。