len = (len == 1) ? (len++): (len--); 为什么len=5 出来后还是5,没变?括号没起作用吗?

tfling2012 2013-05-15 10:51:57
int len=5;如下两个步骤
(1)
if(len==1){
len++;
System.out.println(len);
}else{
len--;
}
(2)
len = (len == 1) ? (len++): (len--);
得到的答案是:(1)4,(2)5
为什么第二个会是5而不是4?难道括号没起作用吗?
...全文
507 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
dddfffxxx 2013-05-16
  • 打赏
  • 举报
回复
受教了,一楼的解释不错
rencht 2013-05-16
  • 打赏
  • 举报
回复
引用 9 楼 tfling2012 的回复:
我想问,为什么len = (len == 1) ? (len++): (len--);加了括号却没起任何作用,为什么不是(len--)等同于len=len-1;然后len=len,这样答案也该是4,为什么还是5?括号怎么没起作用
int len1 = 5, len2 = 5;
int x = len1--; // x = 5, len1 = 4
int y = --len2; // y = 4, len2 = 4
跟括号没关系
lcf 2013-05-16
  • 打赏
  • 举报
回复
引用 10 楼 tfling2012 的回复:
[quote=引用 6 楼 Acesidonu 的回复:] len = (len--);
如果用 len=5; int x=(len--); System.out.println(x); 这里的len虽然变成4了但是x打印出来还是5?我就有点纳闷了,括号不是优先级最高吗?为什么不先执行括号里面的[/quote] 看我的解释没,1楼
tfling2012 2013-05-16
  • 打赏
  • 举报
回复
引用 6 楼 Acesidonu 的回复:
len = (len--);
如果用 len=5; int x=(len--); System.out.println(x); 这里的len虽然变成4了但是x打印出来还是5?我就有点纳闷了,括号不是优先级最高吗?为什么不先执行括号里面的
tfling2012 2013-05-16
  • 打赏
  • 举报
回复
引用 4 楼 bree06 的回复:
这样写你应该可以理解++,--是怎么运算的
	public static void main(String[] args) {
		int len = 5;
		int i = len == 1 ? len++ : len--;
		System.out.println(i);     // i = 5
		System.out.println(len);   // len = 4
	}
我想问,为什么len = (len == 1) ? (len++): (len--);加了括号却没起任何作用,为什么不是(len--)等同于len=len-1;然后len=len,这样答案也该是4,为什么还是5?括号怎么没起作用
oh_Maxy 2013-05-15
  • 打赏
  • 举报
回复
len = len--; 相当于 temp = len--;//temp==5 len = len-1;//len == 4 len = temp;//len == 5 感觉,那一瞬间,发生了很多事情。。
bree06 2013-05-15
  • 打赏
  • 举报
回复
这样写你应该可以理解++,--是怎么运算的
	public static void main(String[] args) {
		int len = 5;
		int i = len == 1 ? len++ : len--;
		System.out.println(i);     // i = 5
		System.out.println(len);   // len = 4
	}
  • 打赏
  • 举报
回复
len++ 是把len的值存起来作为临时值输出,再自增1 ++len 是自增1,再把len的值存储起来,之后输出。
rencht 2013-05-15
  • 打赏
  • 举报
回复
len++是先算后加,即len++赋值给len仍是len自增之前的值;换成++len就行了; 这两种len本身的值都自增
lcf 2013-05-15
  • 打赏
  • 举报
回复
括号只改变运算优先级,不能改变这个操作符本身的性质。你可以这么看放在后面的++: int operator++ (int & op) { // 假设这里的op是按引用传递,也就是内部操作会影响到外部的值 int tmp = op; op = op + 1; return tmp; } 这样(2)就变成了这个: len = (len == 1)? (operator++(len)) : (operator--(len)); 跟不用括号返回的值是一样的
七神之光 2013-05-15
  • 打赏
  • 举报
回复
对 括号没用 = 赋值运算优先级最低
不许我帅 2013-05-15
  • 打赏
  • 举报
回复
打眼一看不仔细琢磨还真是没想透++、--运算的本质,学习了!!
Acesidonu 2013-05-15
  • 打赏
  • 举报
回复
len = (len--);

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧