Java中字符串拼接使用单引号空格出现意外输出的原因咨询
理解Java字符串拼接中的char与String差异
你遇到的问题核心是Java中+运算符的运算规则和类型转换逻辑,尤其是char类型和String类型在拼接/运算中的区别,咱们一步步拆解:
首先明确两个关键规则:
- Java里的
+运算符有两种作用:数值加法(当两边都是数值类型时)和字符串拼接(当至少一边是String类型时)。 char类型本质是16位的Unicode码点,参与数值运算时会自动转成对应整数(比如空格' '的ASCII码是32);而" "是String类型,直接参与字符串拼接。
接下来逐个分析你的代码:
1. 第一条语句:System.out.println( "Answer is " + sum + sum2 );
运算顺序从左到右:
- 先执行
"Answer is " + sum:左边是String,所以把sum(24)转成字符串,得到"Answer is 24"。 - 再执行
"Answer is 24" + sum2:把sum2(16)转成字符串拼接,最终输出Answer is 2416,符合预期。
2. 第二条语句:System.out.println( "Answer is " + sum + ' ' + sum2 );
同样从左到右运算:
- 第一步:
"Answer is " + sum→"Answer is 24"(字符串)。 - 第二步:
"Answer is 24" + ' ':左边是String,char类型的空格会被转成字符串" ",拼接后得到"Answer is 24 "。 - 第三步:
"Answer is 24 " + sum2→ 拼接成"Answer is 24 16",所以输出正常。
3. 第三条语句:System.out.println( "Answer is " + (sum+sum2) );
括号改变了运算优先级:
- 先执行括号内的
sum + sum2:两个int相加,得到24+16=40。 - 再执行
"Answer is " + 40:把40转成字符串拼接,输出Answer is 40,符合预期。
4. 第四条语句:System.out.println( "Answer is " + (sum + ' ' + sum2) );
这就是问题所在!括号内没有String参与,全部是数值加法:
sum是int(24),' '是char,自动转成ASCII码32,第一步24 + 32 = 56。- 然后
56 + sum2(16)= 72,括号内最终结果是int类型的72。 - 最后执行
"Answer is " + 72,把72转成字符串拼接,所以输出Answer is 72。
为什么替换成双引号空格" "就正常?
当你把括号里的' '换成" "时,括号内的运算变成sum + " " + sum2:
- 第一步
sum + " ":int和String相加,触发字符串拼接,得到"24 "。 - 第二步
"24 " + sum2:继续拼接得到"24 16",再和外面的字符串拼接,就得到了你预期的结果。
总结一下
- 当
+运算符任意一边是String时,执行字符串拼接;否则执行数值加法。 - 运算顺序很重要:默认从左到右,除非括号改变优先级。
char是数值类型(会转成整数),String是字符串类型,两者在+运算中的行为完全不同。
内容的提问来源于stack exchange,提问作者Gon49
相关产品推荐
相关产品推荐

