J2SE_运算符_表达式

1. i++,++i

2.& && | ||

&& || 会短路(即前一个为false或true,后面就不运行)

3.顺序

++--

*/

+-

>><<

><

=!=

&

|

&&
||

 

 

 

 

 

 

 

 

 

 

 

 

 

 

得到的结论: 自增自减运算符, 如果是符号在值之后, 会首先记录一下需要自增一次. 这个自增发生的时机:
1. 运算式结束.
2. 对同一个值需要进行下一次自增或自减运算.
就总结得到这么一点, 如果有不合适或不完整的地方, 期待楼下高手指点...

Java code
   
   
/** * @param args */ public static void main(String[] args) { int a = 2 ; // int y = a ++ + ++ a * --a; // 结果是14, 首先做*, 然后做+, /** * 两个栈, 一个数值栈, 一个符号栈.(下面对自增自减运算符没有对优先级判断, * 因为我知道的自增自减的运算符优先级好像算是最高了吧....不对的话请见谅) * 1. 读入a++, a++的值返回为2, 记录a一次自增.a++的返回值入栈 * 2. +号入栈, 此时值栈[2], 符号栈[+] * 3. 读入++a, ++a返回多少呢? 这里是先自增后运算的++a, * 然而, 前面还记录了一次a的自增, 所以, ++a返回4 * 返回的4也入栈. * 4. 此时值栈[2, 4], 符号栈[+] * 5. 符号栈有元素, 读取*后比较*和+的优先级, * 如果栈内的符号优先级大于等于新读取的符号, 值栈的栈顶出栈两个元素, 符号栈元素出栈, 进行运算. * 计算结果重新入栈到值栈. * 如果栈内的符号优先级小于新读取的符号, 新读取的符号继续入栈. * 在这里, 由于栈顶符号+优先级小于新读取符号*, 所以, *继续入栈, 进入符号栈. * 6. 所以, *号入栈后值栈[2, 4], 符号栈[+, *] * 7. 然后读取--a, 上面做完++a之后, a值是4, 并且是没有记录自增或自减的. 因此, --a返回3, 而a值也成为3. * 8. 根据7, 也就是说将--a的返回值3入栈到值栈中. 此时值栈[2, 4, 3], 符号栈[+, *] * 9. 运算时读取完毕. * * 下面是出栈进行运算. * 1. 值栈出栈3. * 2. 符号栈出栈* * 3. 值栈出栈4 * 4. 运算3*4 = 12; * 5. 符号栈出栈+ * 6. 值栈出栈2 * 7. 运算12 + 2 = 14; * */ // int z = a ++ - ++ a; // 结果-2, 如果把-号变成+号, 结果就是6, 所以, 在做减法运算的时候, a++部分值为2, ++a部分为4 int x = a ++ - a ++ ; // 结果是-1, 如果把-号变成+号, 结果就是5, 所以, 在做减法运算的时候, -号左边值是2, 右边值是3; System.err.println(x); }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值