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。
怎么样??????
修改 我修复了代码示例中的错误。
答案 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;
}
在这种情况下,假设a
和b
设置为0
,结果将始终为a
(即0
) ,不论最后一个词(即使它不是b
而是b + 1
或其他任何东西)。
显然,1 + a = 1 + 0 = 1
和1 > 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;