A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 箫庐 于 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"?还是其他原理?麻烦大家帮我解说解说,谢谢~~

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

10 个回复

倒序浏览
这种运算如果没有特定算法,或加()的话,一般情况下都是从前往后算
而字符串是,只要与它用"+"运算,就是连接,但是因为是从前往后运算,所以会先运算前面的.但是只要碰到字符串,那之后"+"的功能就全都是连接了,除非后面运算在()中运算

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
许邦存 来自手机 黑马帝 2011-12-5 15:33:09
藤椅
碰到是字符串的应该都是转为字符串表示了吧,第四个表达式从+字符串开始就是字符串了,后面的自然也是字符串表示了。
回复 使用道具 举报
当运算到“b”+'a'中这个加号其实是个字符串连接符,不是加法运算符
回复 使用道具 举报
第四个 System.out.println(1 + 'a' + "b" + ('a' + 1));
这样才是98b98
回复 使用道具 举报
System.out.println()语句中包含“+”操作符,“+”表示“字符串连接”,当一个String后面紧跟一个非String类型的元素时,就会尝试将这个非String转换为String类型,所以
System.out.println(1 + 'a' + "b" + 'a' + 1);

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



评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

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

谢谢.明白了.
回复 使用道具 举报
箫庐 黑马帝 2011-12-6 08:29:50
11#
fly51888 发表于 2011-12-5 20:49
System.out.println(1 + 'a' + "b" + 'a' + 1);的相加顺序:
第一步:在没有与字符串相加时,1+'a' 中字符a ...

明白了~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马