黑马程序员技术交流社区

标题: 请教""与其他运算表达式一起时,怎么确定优先级? [打印本页]

作者: 箫庐    时间: 2011-12-5 13:29
标题: 请教""与其他运算表达式一起时,怎么确定优先级?
本帖最后由 箫庐 于 2011-12-6 08:30 编辑

下面几个语句:

System.out.println(1 + 'a');
System.out.println(1 + "a");
System.out.println(1 + 'a' + "b");
System.out.println(1 + 'a' + "b" + 'a' + 1);

运行结果分别是:98   1a  98b  98ba1

第四个有点不了解?为什么不是98b98呢?

是不是字符串后面+'a'  相当于 +"a"?还是其他原理?麻烦大家帮我解说解说,谢谢~~
作者: 颜秉武    时间: 2011-12-5 13:33
这种运算如果没有特定算法,或加()的话,一般情况下都是从前往后算
而字符串是,只要与它用"+"运算,就是连接,但是因为是从前往后运算,所以会先运算前面的.但是只要碰到字符串,那之后"+"的功能就全都是连接了,除非后面运算在()中运算
作者: 许邦存    时间: 2011-12-5 15:33
碰到是字符串的应该都是转为字符串表示了吧,第四个表达式从+字符串开始就是字符串了,后面的自然也是字符串表示了。
作者: 方书堂    时间: 2011-12-5 16:50
当运算到“b”+'a'中这个加号其实是个字符串连接符,不是加法运算符
作者: 杨强    时间: 2011-12-5 16:52
第四个 System.out.println(1 + 'a' + "b" + ('a' + 1));
这样才是98b98
作者: 别让生命去等待_    时间: 2011-12-5 17:25
System.out.println()语句中包含“+”操作符,“+”表示“字符串连接”,当一个String后面紧跟一个非String类型的元素时,就会尝试将这个非String转换为String类型,所以
System.out.println(1 + 'a' + "b" + 'a' + 1);

output:98ba1
作者: fly51888    时间: 2011-12-5 20:49
System.out.println(1 + 'a' + "b" + 'a' + 1);的相加顺序:
第一步:在没有与字符串相加时,1+'a' 中字符a提升为整数97,加1后为98。
第二步:当基本数据类型遇到与字符串相加时,会将基本数据类型自动转换成字符串"98",与"b"进行字符串连接后为"98b"
第三步:该原理与第二步中的一样,'a'和1都会转换成相应的字符串"a","1"。字符串相加后为:"98ba1"。




作者: 常登凯    时间: 2011-12-5 21:01
在没有与字符串相加时,1+'a' 结果提升为整数98,在+"b"之后结果提升为字符串98b,然后后面的都提升为字符串所以结果是98ba1,。。原则就是任何计算与字符串用“+”号相连之后结果都转换为字符串
作者: 赵燕燕    时间: 2011-12-6 01:31
任意类型的数据+String,都会先把该数据转换成字符串,再与字符串相连
“”不是运算符,没有优先级,它只表示一个字符串
作者: 箫庐    时间: 2011-12-6 08:29
永无止境的、 发表于 2011-12-5 13:33
这种运算如果没有特定算法,或加()的话,一般情况下都是从前往后算
而字符串是,只要与它用"+"运算,就是连接, ...

谢谢.明白了.
作者: 箫庐    时间: 2011-12-6 08:29
fly51888 发表于 2011-12-5 20:49
System.out.println(1 + 'a' + "b" + 'a' + 1);的相加顺序:
第一步:在没有与字符串相加时,1+'a' 中字符a ...

明白了~~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2