在Java中:
System.out.println('c' + "Hello world" + 1);
给予
cHello world1
但是
System.out.println('c' + 1 + "Hello world");
给予
100Hello world
即c转换为它的ASCII字符Java对此使用了什么规则?有人可以告诉我我可以遵循的一组规则来预测输出,因为这对我来说已经很混乱了。
答案 0 :(得分:3)
仅当左侧为+
时,String
运算符才成为字符串连接运算符。否则,根据docs,它仍然是加法运算符。
在您的示例中,'c'
是一个字符文字,在添加过程中将其提升为int
。请注意,c
是99,而不是您的示例中的119,因此输出是100Hello world
。
答案 1 :(得分:2)
因为Java中的char
扮演两个角色,当您将它与字符串连接时,它扮演一个字符串的角色,而当您将其与另一个数字值相加时,扮演第二个角色。
所以在您的情况下:
System.out.println('c' + 1 + "Hello world");
等同于:
System.out.println(('c' + 1) + "Hello world");
^ ^
'c'将其转换为99
的地方:
System.out.println((99 + 1) + "Hello world");
^^^ ^
为此,您得到:
100Hello world