三目运算符引发的一次事故

 
public class Test {
    public static void main(String[] args) throws Exception {
             String r4="111";
            String r3="222";
            Object [] row=new Object[]{r4,r3};
            Object ts=row[1]==null?"无":row[1];
            System.out.println("aa"+ts+"bb");
            System.out.println("aa"+row[1]==null?"无":row[1]+"bb");
    }
}

发现页面没有按预期结果输出,检查发现后台的运算结果与预期不符,便于理解简化为上述代码形式

上述运算结果

aa222bb
222bb

不一致原因:二目运算符==与三目运算符?的优先级小于+,造成了实际运算如下

 System.out.println("aa"+row[1]==null?"无":row[1]+"bb");

所以正确做法是在三目运算符处加上括号

System.out.println("aa"+(row[1]==null?"无":row[1])+"bb");

猜你喜欢

转载自www.cnblogs.com/yanan7890/p/9172228.html