map.put(str, false? i :(map.get(str) + (false? 1 : i)) );
map.put(str, true? i :(map.get(str) + (false? 1 : i)) );
map.put(str, i );
通过验证知道,在i=null的时候,上面两句无论都是true还是都是false结果都是挂。
但是第三句可以知道map.put直接传入i是没有问题的,那么,我们就可以知道三元
运算符在运算的时候一定是先执行到了后面的语句(map.get(str) + (false? 1 : i))也就
是三元运算符运算后有可能输出的结果,你那么写等效于下面的这三句
Integer x= (i==null? 1 : i);
Integer a=(map.get(str) + x);//i是null时将会在这里挂掉
map.put(str, map.get(str)==null ? i :a);
需要先知道结果才能继续运算,所以你这个代码在运行到上面第二行那里就挂了。
|