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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王德南 中级黑马   /  2012-5-8 18:37  /  1502 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

String s="four:"+2+2;
System.out.println(s);
这个程序不是应该输出four:4而是输出four:22啊?为什么会这样的啊,思维短路了就是想不通啊求解释啊

7 个回复

倒序浏览
符号的运算级别没搞清楚么,这样的话是由前到后+的,先"four:"+2,得到“four2”,再+2。
你可以返回来看看 2+2+“four”,这样就是4four了
回复 使用道具 举报
String s="four:"+2+2;//这里是运算符优先级的问题,同级运算符是从左到右执行的,再有当String型参与+运算时,这个+是字符串连接运算符,
                    //过程是这样的:第一步"four:"+2="four:2",第二步然后再与第二个2进行+运算,这时第一步得到的又是一个字符串,
                    //所以第二步中的+也是字符串连接符,结果为four:22
System.out.println(s);
回复 使用道具 举报
因为您前面的是一个字符串,后面的数字也自动的识别为字符串了 所以是22
回复 使用道具 举报
String s="four:"+2+2;
这句话的流程应该是 four+2就是four连接2不是加2,所以得到four2. 然后four2还是字符串相连接, 就是four22了。 和字符串相连的+号只是连接符,不是加法运算符的意思。
回复 使用道具 举报
如果和字符串连接的是int、float、double、boolean、long、char等基本类型的数据。这些数据本身将直接转变成字符串,然后再与字符串连接。String s="four:"+2+2;的实际运行应该是:String s=“four:”+"2"+"2",运行结果为:four:22。若楼主想的到结果:four:4,应声明为:String s=”four:“+(2+2)。
回复 使用道具 举报
嗯恍然大悟啊谢谢大家了
回复 使用道具 举报
这个是运算符的优先级和基本数据类型在参加运算时的类型转换以及“+”符号含义的问题。首先在一个表达式中,如果各个符号的优先级是同级的,那么会从左向右运算。基本数据类型在参加运算时的转换是:容量小的类型默认转换为容量大的数据类型,byte,short,char->int->long->float->double。当表达式中用“+”连接基本数据类型和字符串时,此时的“+”不能算是算术运算的加号,而看成字符串连接符,基本数据类型就会转换成字符串来进行连接。正如楼主的代码:String s="four:"+2+2;因为都是"+"号,运算符的同级的,就会从左向右运算。首先“four:” + 2得"four:2",再将"four:2"+2就得"four:22"。这样结果就出来了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马