当前位置:编程学习 > JAVA >>

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

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?难道括号没起作用吗? java j2se i++ --------------------编程问答-------------------- 括号只改变运算优先级,不能改变这个操作符本身的性质。你可以这么看放在后面的++:
int operator++ (int & op) { // 假设这里的op是按引用传递,也就是内部操作会影响到外部的值
  int tmp  = op;
  op = op + 1;
  return tmp;
}
这样(2)就变成了这个:
len = (len == 1)?  (operator++(len)) : (operator--(len));
跟不用括号返回的值是一样的 --------------------编程问答-------------------- len++是先算后加,即len++赋值给len仍是len自增之前的值;换成++len就行了;
这两种len本身的值都自增 --------------------编程问答-------------------- len++  是把len的值存起来作为临时值输出,再自增1
++len  是自增1,再把len的值存储起来,之后输出。 --------------------编程问答-------------------- 这样写你应该可以理解++,--是怎么运算的
	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--;
相当于
temp = len--;//temp==5
len = len-1;//len == 4
len = temp;//len == 5

感觉,那一瞬间,发生了很多事情。。 --------------------编程问答-------------------- len = (len--); --------------------编程问答-------------------- 打眼一看不仔细琢磨还真是没想透++、--运算的本质,学习了!! --------------------编程问答-------------------- 对 括号没用 = 赋值运算优先级最低 --------------------编程问答--------------------
引用 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?括号怎么没起作用 --------------------编程问答--------------------
引用 6 楼 Acesidonu 的回复:
len = (len--);

如果用
len=5;
int x=(len--);
System.out.println(x);
这里的len虽然变成4了但是x打印出来还是5?我就有点纳闷了,括号不是优先级最高吗?为什么不先执行括号里面的 --------------------编程问答--------------------
引用 10 楼 tfling2012 的回复:
Quote: 引用 6 楼 Acesidonu 的回复:

len = (len--);

如果用
len=5;
int x=(len--);
System.out.println(x);
这里的len虽然变成4了但是x打印出来还是5?我就有点纳闷了,括号不是优先级最高吗?为什么不先执行括号里面的

看我的解释没,1楼 --------------------编程问答--------------------
引用 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

跟括号没关系 --------------------编程问答-------------------- 受教了,一楼的解释不错
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,