黑马程序员技术交流社区
标题:
运算符的优先级问题?
[打印本页]
作者:
寇弘禄
时间:
2013-3-23 14:55
标题:
运算符的优先级问题?
本帖最后由 寇弘禄 于 2013-3-23 22:30 编辑
public class Test1 {
public static void main(String[] args) {
Test2 test = new Test2();
System.out.println(test.returnTest2());
}
}
class Test2 {
public int returnTest2(){
int a = 10;
int c = a++ + ++a*2; //这里是怎么运算的,我觉得结果是32,但是运算结果是34
return c;
}
}
复制代码
作者:
xuqangxing
时间:
2013-3-23 15:03
本帖最后由 xuqangxing 于 2013-3-23 15:06 编辑
int c=a+++++a*2 +和++运算符同优先级 结合方向为“自右到左”(右结合性即相当于c=a+(++(++a*2))
作者:
陈原野
时间:
2013-3-23 15:04
a++和++a属于一元运算,优先级高于二元和三元运算,然后是算术运算按基本规律就行 先乘除后加减!
作者:
xuqangxing
时间:
2013-3-23 15:05
打错了 是自右到左
作者:
秦久启
时间:
2013-3-23 16:25
楼上的都是正解,其实没有必要纠缠于谁先运算,开发中不会出现那种状况的!要改变运算顺序,()就可以轻松的解决。你懂的。。。。
作者:
张海洋
时间:
2013-3-23 16:35
++或者--运算符;++在后:是先计算值,后累加 ;++在前:先累加,后计算值;--同理可得;
作者:
壁虎
时间:
2013-3-23 16:54
a++和++a属于一元运算,优先级高于二元和三元运算,然后是算术运算按基本规律就行 先乘除后加减!
还有值得注意++在前和++在后的区别。a++是先返回然后对自身进行加1,++a是先对自身进行加1后返回。
如:
int i=10;
int a=i++;
System.out.println(a+".."+i);//输出:10...11
复制代码
int i=10;
int a=++i;
System.out.println(a+".."+i);//输出11...11
复制代码
我们来一起算一算
int a=10;
int c = a++ + ++a*2;
复制代码
按照优先级,先算++,这里有两个++,既然同级,从左往右开始算。
1. a++ a自身的值变为11了,但是++在后是先返回后再对自身进行加1的,所以就变成了这样:10 + ++a*2//a的值虽为11了,但是你a++后的返回值还是10
2.++a*2其实就是++11*2,由于++在前所以是先对自身进行加1再返回 于是就变成了这样: 12*2结果为24
3.然后再加上10,最后的结果就是34了。
其实楼主也没必要纠结这个优先级的顺序,实在忘记了优先级的顺序,我们可以人为的通过括号来进行控制。我想楼主应该是不怎么理解++在前和++在后的效果
作者:
魏福伟
时间:
2013-3-23 17:15
查啦下资料++的运算符高于+
int c = (a++) + (++a) * 2;
作者:
寇弘禄
时间:
2013-3-23 22:29
tuo1254 发表于 2013-3-23 16:54
a++和++a属于一元运算,优先级高于二元和三元运算,然后是算术运算按基本规律就行 先乘除后加减!
还有值得注 ...
谢谢,看懂了。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2