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?难道括号没起作用吗?javaj2sei++

解决方案 »

  1.   

    括号只改变运算优先级,不能改变这个操作符本身的性质。你可以这么看放在后面的++:
    int operator++ (int & op) { // 假设这里的op是按引用传递,也就是内部操作会影响到外部的值
      int tmp  = op;
      op = op + 1;
      return tmp;
    }
    这样(2)就变成了这个:
    len = (len == 1)?  (operator++(len)) : (operator--(len));
    跟不用括号返回的值是一样的
      

  2.   

    len++是先算后加,即len++赋值给len仍是len自增之前的值;换成++len就行了;
    这两种len本身的值都自增
      

  3.   

    len++  是把len的值存起来作为临时值输出,再自增1
    ++len  是自增1,再把len的值存储起来,之后输出。
      

  4.   

    这样写你应该可以理解++,--是怎么运算的
    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
    }
      

  5.   

    len = len--;
    相当于
    temp = len--;//temp==5
    len = len-1;//len == 4
    len = temp;//len == 5感觉,那一瞬间,发生了很多事情。。
      

  6.   

    我想问,为什么len = (len == 1) ? (len++): (len--);加了括号却没起任何作用,为什么不是(len--)等同于len=len-1;然后len=len,这样答案也该是4,为什么还是5?括号怎么没起作用
      

  7.   

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

  8.   

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

  9.   


    int len1 = 5, len2 = 5;
    int x = len1--; // x = 5, len1 = 4
    int y = --len2; // y = 4, len2 = 4
    跟括号没关系