返回语句中具有常量变量的三元运算符。返回a> b?a:b + 1;或者返回1 + a> b?a:b;

时间:2015-08-27 17:23:47

标签: java return operator-keyword ternary

public static int test(){
        int a = 0;
        int b = 0;      
        return a>b?a:b + 1;
}

结果是1。

public static int test(){
        int a = 0;
        int b = 0;      
        return 1 + a>b?a:b;
}

结果是0。

怎么样??????

修改 我修复了代码示例中的错误。

4 个答案:

答案 0 :(得分:2)

return a>b?a:b + 1中,首先评估a>b?a:b;由于a不大于b,因此会返回b + 1的值,即1。

return 1 + a>b?a:b中,编译器将条件视为(1 + a) > b。因为它是真的,它返回a的值,即0。

答案 1 :(得分:1)

这是Java中操作顺序的结果。查看此Java Operators帖子以获取运营商优先级列表。

第一个语句评估如下:

SELECT SUM(pastDueRepl) as pastDueRepl, sum(pastDueInsp) as pastDueInsp  FROM(
  SELECT 
  count(*) as pastDueRepl   , 0 as pastDueInsp  
  FROM TBLPTS_APPDATA 
  WHERE APPV_PTSSTATUS = '2'        
  AND (APPD_NEXTREPLDATE IS NOT NULL)   
  AND APPD_NEXTINSPDATE between DATEADD(Day,-30,GETDATE()) and GETDATE()

  UNION ALL

  SELECT 
  0 as pastDueRepl, count(*) as pastDueInsp 
  FROM TBLPTS_APPDATA 
  WHERE APPV_PTSSTATUS = '2'        
  AND (APPD_NEXTINSPDATE IS NOT NULL) 
  AND APPD_NEXTINSPDATE between DATEADD(Day,-30,GETDATE()) and GETDATE()    
) t

你的第二个陈述评估如下:

=> a > b ? a : b + 1
-> 0 > 0 ? 0 : (0 + 1) 
// 0 is not greater than 0 therefore return 'b+1' which is 1
-> 1 

对于第二个语句,“添加”操作=> 1 + a > b ? a : b -> (1 + a) > b ? a : b -> (1 + 0) > 0 ? 0 : 0 // 1 is greater than zero therefore return 'a' which is 0 -> 0 优先于“关系”操作1 + a

再次阅读上面的Java Operators链接以获取更多信息。

答案 2 :(得分:0)

根据问题的标题,显然应该读取两个test()方法中的一个

public static int test(){
        int a = 0;
        int b = 0;      
        return 1+a>b?a:b;
}

在这种情况下,假设ab设置为0,结果将始终为a(即0) ,不论最后一个词(即使它不是b而是b + 1或其他任何东西)。

显然,1 + a = 1 + 0 = 11 > a,结果是a,即0

答案 3 :(得分:0)

你可能认为

return a>b?a:b + 1;

相当于

return (a>b?a:b) + 1;

但事实并非如此。

相当于
return a>b?a:(b + 1);

相同的问题
return 1 + a>b?a:b;

实际上是

return (1 + a)>b?a:b;