今天无意间看到别人写的这么一句,我就晕了...
return selforder <= order ? selforder != order ? -1 : 0 : 1;
返回的是个int类型
我知道三目可以连着写,是从右往左运算的,但这个...咋看都不像三目.
呵呵.谁来说明下?

解决方案 »

  1.   

    order ? ((selforder != order) ? -1 : 0 ): 1;
      

  2.   

    selforder <= order ? (selforder != order ? -1 : 0) : 1;
      

  3.   

    应该是return (selforder <= order) ? ((selforder != order) ? -1 : 0) : 1;
      

  4.   

    selforder <= order ? (selforder != order ? -1 : 0) : 1
      

  5.   

    return selforder <= order ? (selforder != order ? -1 : 0) : 1;
    这样应该就清楚了
    最恨这样写代码的
    加个括号会死么?
    读的时候难读的要命
    要我看到项目中有人这样写代码,直接往死里骂
      

  6.   

    就像LZ想的那样(selforder <= order) ? ((selforder != order) ? -1 : 0) : 1;偶看的很纠结
      

  7.   

    return (selforder <= order) ? ((selforder != order) ? -1 : 0) : 1;就这样理解。
      

  8.   


    汗 这个刚研究过...
    1  ?: 条件运算符,右结合性
    2  一元运算符左结合性的有[].()(method call) .中间那个.都知道是对成员的引用.这是最高优先级的三个
          所以有这样的代码 boolean b=Pattern.compile(".*?\\d{3}").matcher("whose your daddy?123").matches();
          大家都清楚怎么回事.
    2 一元运算符右结合性 ! ~ ++ -- +(单目) -(单目) ()(cast)  new  这是第二高优先级的8个
          1)想一想内部类的  A a=new A();  A.B  ab=a.new B(); 
          2)再想一想  Object b=new Integer(4);
                         int j=   -(int)(Integer)(Number)b;
                 大家也都清楚是什么意思
     
    3 再看楼主这个   selforder <= order ? selforder != order ? -1 : 0 : 1;
             加上括号后是(selforder <= order) ? ((selforder != order)? -1 : 0 ): 1;
             1)为什么这么加括号,我们根据关系运算符大于条件运算符,2)条件运算是右结合的
             3)注意虽然是右结合的但是 算起来却是从左往右算的.所以就容易理解了.
             相当于 if(selforder<=order){
                     if(selforder!=order)
                          return -1;
                     else retern 0;
                     }
                   else
                       return 1;
     
    4 既然是右结合性,为什么从左往右算?
             1)您从右往左能算得了吗? 
             2)条件运算符本身就是像a>b?1:0 一样从左往右算的
             3)类比  
         int a=2;
         int d=4;
         int c=a+++--d;
         System.out.println(c);
                  
     
      

  9.   

    3 再看楼主这个 selforder <= order ? selforder != order ? -1 : 0 : 1;
      加上括号后是(selforder <= order) ? ((selforder != order)? -1 : 0 ): 1;
      1)为什么这么加括号,我们根据关系运算符大于条件运算符,2)条件运算是右结合的
      3)注意虽然是右结合的但是 算起来却是从左往右算的.所以就容易理解了.
      相当于 if(selforder<=order){
      if(selforder!=order)
      return -1;
      else retern 0;
      }
      else
      return 1;
    -------------------
    够通俗了
      

  10.   

    selforder <= order ? (selforder != order ? -1 : 0) : 1;
      

  11.   


    很多框架的源码都是这样的,这样写好比if else更快。会写这个代码的人代码也写到一定的程度
      

  12.   

    http://topic.csdn.net/u/20101124/10/d1135308-07c6-46eb-8c3e-60e61e8fb9a2.html
    和这个差不多的帖子,右结合和从又开始算不是一回事
      

  13.   

    这样代码行数少,一屏能看到更多代码
    不过要加括号
    加了括号后的可读性并不比一堆的if else更难读!
      

  14.   

    return selforder <= order ? selforder != order ? -1 : 0 : 1;
    相当于 if(selforder <= order) {
    if(selforder != order)
    return -1;
    else 
    return 0
    } else {
    return 1;
    }
      

  15.   

    return selforder <= order ? selforder != order ? -1 : 0 : 1;
    这个很好理解啊,就像34楼说的那样理解就行了。
      

  16.   

    在log4j-1.2.16里面随便搜索了一下“?”,以下是一个小小的例子找到 '?' 在 'D:\javaplugin\apache-log4j-1.2.16\apache-log4j-1.2.16\src\main\java\org\apache\log4j\xml\DOMConfigurator.java' 中:
    D:\javaplugin\apache-log4j-1.2.16\apache-log4j-1.2.16\src\main\java\org\apache\log4j\xml\DOMConfigurator.java(338):      Logger logger = (catFactory == null) ? repository.getLogger(loggerName)
    D:\javaplugin\apache-log4j-1.2.16\apache-log4j-1.2.16\src\main\java\org\apache\log4j\xml\DOMConfigurator.java(402):       cat = (catFactory == null) ? repository.getLogger(catName) : repository.getLogger(catName, catFactory);
    找到 '?' 2 次。
      

  17.   

     selforder < order return -1
     selforder = order return 0 
     selforder > order return 1
      

  18.   

    你没看到C#中的linq语法。。看到你就不觉得这个稀奇了
      

  19.   


    return selforder <= (order ? (selforder != order ? -1 : 0 ): 1);
      

  20.   


    Return IIf(selforder <= order, IIf(Not selforder = order, -1, 0), 1)
    VB.NET表示木有鸭梨
      

  21.   


    return ( (selforder <= order )? ((selforder != order )? -1 : 0 ): 1);对吧
      

  22.   

    return selforder <= order ? (selforder != order ? -1 : 0) : 1
    嵌套不加括号,维护很困难啊!
      

  23.   

    selforder <= order ? (selforder != order ? -1 : 0) : 1
      

  24.   

    三目运算就是把if else 语句简化了!看着更好玩!
      

  25.   

    (selforder <= order) ? ((selforder != order)? -1 : 0 ): 1;
    应该这样吧?
      

  26.   

     if(selforder <= order)
         if(selforder != order)
              return -1;
         else 
              return 0;
     else 
          return 1;
      

  27.   

    直接转化成IF ELSE 语句好了啊,一定要要三目运算看做什么
      

  28.   

    呵呵,  boolean bo = b==a? true:false;
      

  29.   

    由右至左boolean bo = b==a? true:false;
      

  30.   

    代码标识kiss---keep it simple and stupid!
      

  31.   

    楼主求解决servlet-api.ja
    r文件