字符与字符串参与运算
问题描述:
System.out.println(1 + ‘a’ + “hei hei hei” + ‘a’);
结果为什么是98hei hei heia,而不是98hei hei heia97
问题解答:
-
char类型的字节与整数类进行运算的时候,先将char类型的字符转换成底层ascII码的值,在运算得到一个整数。
System.out.println(‘a’ + 1); // 输出结果? 98
而字符串与任何数据类型用+串联都会产生新的字符串
- System.out.println(1 + ‘a’ + “hei hei hei” + ‘a’);
// 结果? 98hei hei heia
- System.out.println( “hei hei hei”+1 + ‘a’ + ‘a’);
// 结果? hei hei hei1aa
我们可以看出来只要轮到了字符串参与了运算,之后的运算全部都是直接粘在字符串上产生新的字符串。
偶然间发现的一个有意思的事情:
System.out.println( “hei hei hei”+1 + ‘a’ + ‘a’);
敲错了,敲成了
System.out.println( “hei hei hei”+1 + ‘a’ + + ‘a’);
结果运行结果变成了hei hei hei1a97
瞬间有点蒙,后来解决了
解释原因:
‘a’ + + ‘a’ 问题就出在这,jvm(java虚拟机)把后一个+识别成了正号,正号的优先级是比加法高的,所以先进行了了运算+‘a’,得出了97再从前面加过来,就出现了这个答案hei hei hei1a97