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) {--------------------编程问答-------------------- len = len--;
int len = 5;
int i = len == 1 ? len++ : len--;
System.out.println(i); // i = 5
System.out.println(len); // len = 4
}
相当于
temp = len--;//temp==5
len = len-1;//len == 4
len = temp;//len == 5
感觉,那一瞬间,发生了很多事情。。 --------------------编程问答-------------------- len = (len--); --------------------编程问答-------------------- 打眼一看不仔细琢磨还真是没想透++、--运算的本质,学习了!! --------------------编程问答-------------------- 对 括号没用 = 赋值运算优先级最低 --------------------编程问答--------------------
我想问,为什么len = (len == 1) ? (len++): (len--);加了括号却没起任何作用,为什么不是(len--)等同于len=len-1;然后len=len,这样答案也该是4,为什么还是5?括号怎么没起作用 --------------------编程问答--------------------
如果用
len=5;
int x=(len--);
System.out.println(x);
这里的len虽然变成4了但是x打印出来还是5?我就有点纳闷了,括号不是优先级最高吗?为什么不先执行括号里面的 --------------------编程问答--------------------
看我的解释没,1楼 --------------------编程问答--------------------
我想问,为什么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