混合两个字符串,产生不希望的输出



我只是在Java中尝试字符串的融合(我不知道我们怎么称呼它们所以我说融合)

int sum = 11+13;
int sum2 = 12+4;

然后我开始用不同的字符串融合来打印它们,比如:

System.out.println(  "Answer is " + sum + sum2 );  //Answer is 2416
System.out.println(  "Answer is " + sum + ' ' + sum2  );  //Answer is 24 16
System.out.println(  "Answer is " + (sum+sum2)  );  //Answer is 40
System.out.println(  "Answer is " + (sum + ' ' + sum2)  );  //Answer is 24 16

对于第1、2和3个语句都可以正常工作。但在4中,它的输出是

答案是72

但是它为什么会来呢?我认为输出应该是

答案是24 16

作为第一个输出字符串"答案是"然后我们输出这个- (sum + ' ' + sum2)因为在sum和sum2之间有一个字符串,它们也会变成一个字符串。但是它给出的输出是72。
另外,我正在用IntelliJ来运行这个程序,如果它有帮助的话。
最后一件事,如果我用&quot代替' ',效果会很好;但是为什么呢?对于第二个语句,它可以正常工作。

因为(sum + ' ' + sum2)中的' '被认为是32的字符码。

int b = ' ';
System.out.println(  "Answer is " + b  );  //Answer is 32

所以,24 + 32 + 16 =72

因为' '(空格)是char,而不是String,而char用于int的操作,通常使用ascii码,' '(空格)的ascii码是32,所以24 + 32 + 16 = 72。当您使用System.out时。println("答案是"+ (sum +"+ sum2)),你会得到答案&;答案是24 16&;

除了已经提供的答案之外:这里的区别是,当第二种情况下计算子表达式x + ' '时,xString类型,而在第四种情况下,它是int类型。因此,在第二种情况下,+表示字符串连接,而在第四种情况下,它表示加法。

括号+ ASCII码得到72。

括号使整数相加。您假设输出应该是24 - 16,但在paranthese中,值不是字符串。Sum和sum2是整型。所有的值都加起来了。正如其他人所解释的那样,space的值为32。这确保了输出是72。

注意:如果你想得到24 16,你必须使用String.valueOf().

System.out.println("Answer is " + (String.valueOf(sum) + ' ' + String.valueOf(sum2)) );

包含在''中的任何内容都被视为字符字面量。字符字面量space是dec32

另一方面,()内部的语句被计算为24 + 32 + 16的加法操作,因此您得到的答案是72

同样,(sum + '!' + sum2)也会产生73

相关内容

最新更新