Java中关于x++与++x在运算中值的变化
来源:互联网 发布:网络爬虫 翻译 编辑:程序博客网 时间:2024/04/30 06:58
首先(x++)+1中的小括号毫无意义,小括号并不会改变++运算的优先级,
对表达式自增运算符加括号绝大部分是因为需要进行代码的格式化,
并告诉java++应该是如何被解释的,否则x+++x只会有一种解释方式。但要注意是否该自增变量的后一表达式元素是否为常量。
如都为变量+++就存在2种情况。
其次,x+++1,也只能进行x++ + 1 这种分割,++1是不行的,常量无法自增。x = 5;
System.out.println(x+++x++);
请问,为什么是11,不是10?
这一题否定了一部分人所说的自增是表达式运算之后进行的,而另一个模糊的解释是x参加一次运算之后,看起来好像是对的。
分析表达式,会发现,如果是x参加一次运算,那么这个表达式就成了x+x x++ syso(x) x++
所以严格来说,是参与一次不为自己的运算。
我习惯用另一种方式来理解他,虽然这与实际赋值的顺序不一致,因为压后了,但是它好理解,
x++的自增将会出现在下次x取值之前。
x=5;
System.out.println(x+++1+x++);请问为什么是12?
表达式为 x+1 ++x (5+1)+6 x++
x=5;
System.out.println(x+++x);
请问为什么是11?
(x++) + x 和 x + (++x)虽然执行顺序上完全不一致,但是他们结果是一致的。
x=5;
System.out.println(x++ + 1);
System.out.println(x++ + x);
因为x+++x并不会被java理解成x + ++x。
x++ + 1被解释成x+1 x++
x++ + x被解释成 x++ x+x 这里为什么是这样呢,因为+x之前,x已经是6了
而这个问题可以使用
x = 5;
y = x;
System.out.println(x+++y);
这样会发现结果为10,也就是说,x++ + y
自增和自减在实际应用是经常用到的,而在复杂的表达式中,你仍然需要用小括号合理解释到底是先加还是后加。
答案可以用来理解,但细微上解释跟字节码执行并不相同,如果想仔细了解,可以javap -c <class文件名>来查看字节码得到正规的执行顺序
- Java中关于x++与++x在运算中值的变化
- C++0X中值得关注的几大变化
- python3.x与2.x的一些变化
- GDAL2.x与1.x的主要变化比较
- java 删除链表中值为x的节点
- 关于x++与++x
- python3.X的变化
- iPhone X 下新的变化—— Human Interface Guidelines iOS 中关于 iPhone X部分的翻译
- Java中x=x+y与x+=y的区别,体现强制类型转换
- Java中x=x+1 与x+=1 的一点区别
- Java中x=x+1 与x+=1 的一点区别
- 透彻理解Java中的++运算(x++和++x的区别)
- 关于在struts1.x中实现RequestProcessor的扩展问题!
- 关于在Cocos2d-x中加载TileMap出错的情况
- 关于位运算x&(x-1)等
- Cocos2D-X中在C++中调用JAVA的方法
- cocos2dx3.x 的变化总结
- Unity5.x AssetBundle 的变化
- 不可以重载的运算符
- 定时提醒工具
- 银行卡校验规则(Luhn算法)
- uva 10387 - Billiard
- 向Windows Phone应用商店(App Hub)提交应用
- Java中关于x++与++x在运算中值的变化
- 异步连接池整理Step1
- JDBC Statement设置逃逸字符
- 使用 RSpec 进行行为驱动测试
- 低通滤波器
- iOS5 Automatic Reference Counting
- HDU OJ 3496 Watch The Movie【动态规划】
- Android-RIL流程(呼叫等待)分析
- Android中dip、dp、sp、pt和px的区别