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

zgc123

初级黑马

  • 黑马币:24

  • 帖子:8

  • 精华:0

© zgc123 初级黑马   /  2016-10-19 23:55  /  1002 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

int a = 2;
int b = a++ + ++a + (a*10);      //int b = a+++++a + (a*10);
为何后面的不能通过编译,前面的表达式去可以。

6 个回复

倒序浏览
改为intb = a++ + ++a + (a*10),你再试试,几个加号之间要隔开的,还有谁教你这么写代码的,不加任何()运算符
回复 使用道具 举报
gyy 中级黑马 2016-10-20 01:00:55
藤椅
这个可能是java编译器现在做了优化吧,按照道理来讲是没有问题。
1. 首先赋值运算是从右边计算开始的
2. ()的优先级大于++的操作符的优先级,大于+的优先级

所以你的写法在编译器看来都是这样的效果  int b = (a++) + (++a) + (a*10)
因为编译器首先计算括号,然后呢发现有++操作符所以就在变量的左右找,最后在执行加号操作。
你写成后面的那种,四个加号写在一起,可能是编译器不允许吧。
下面这种写法也是可以的,楼主试试
[Java] 纯文本查看 复制代码
b = a+++ ++a + (a*10);
回复 使用道具 举报
不加()系统虚拟机识别不了
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
Jerry007 发表于 2016-10-20 00:48
改为intb = a++ + ++a + (a*10),你再试试,几个加号之间要隔开的,还有谁教你这么写代码的,不加任何()运算符 ...

想要深入弄明白,自己我想这样的
回复 使用道具 举报
gyy 发表于 2016-10-20 01:00
这个可能是java编译器现在做了优化吧,按照道理来讲是没有问题。
1. 首先赋值运算是从右边计算开始的
2. ( ...

可以如果是int b= a++-++a+(a*10);这个也可以编译是因为java有编译优化的结果么
回复 使用道具 举报
所以代码还是要标准格式号 要不以后经常会出现格式的错误  都不知道哪里出错了饿
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马