日期:2014-05-20  浏览次数:20661 次

带括号和不带括号为何会影响数值?
Java code

System.out.println("输出一个1-100的随机整数:"+(int)(Math.random()*100)+1);
System.out.println("输出一个1-100的随机整数:"+((int)(Math.random()*100)+1));


为何下面的语句可以实现输出1-100随机数
而上面的输出结果却不同?






------解决方案--------------------
这是运算优先级的问题,如果不带括号那么执行的顺序是先执行 (int)(Math.random()*100)得到一个int数值,这时候将字符串 "输出一个1-100的随机整数:"和int值进行 拼接,比如 int值为78,处理后变成字符串"输出一个1-100的随机整数:78",然后返回这个字符串跟1再进行拼接
而下面这个加了括号,(int)(Math.random()*100)得到一个int数值之后率先+1操作,得到79之后再跟字符串拼接
------解决方案--------------------
简单说,第一行的运行是 ("字符串"+数字)+数字
第二行的运行是 "字符串"+(数字+数字)
探讨

这是运算优先级的问题,如果不带括号那么执行的顺序是先执行 (int)(Math.random()*100)得到一个int数值,这时候将字符串 "输出一个1-100的随机整数:"和int值进行 拼接,比如 int值为78,处理后变成字符串"输出一个1-100的随机整数:78",然后返回这个字符串跟1再进行拼接
而下面这个加了括号,(int)(Math.random()*100)得到一个int数值……

------解决方案--------------------
优先级问题 从左往右 字符串+int会给Int转型为string int+int就是加法