题1
int a = 1, b = 10;
int temp1 = 0 < 1 ? a++ : b++;
System.out.println("a = " + a + ", b = " + b);
System.out.println("temp1 = " + temp1);
题2
int c = 1, d = 10;
int temp2 = 0 < 1 ? c = c + 1 : d + 1;
System.out.println("c = " + c + ", d = " + d);
System.out.println("temp2 = " + temp2);
int c = 1, d = 10;
int temp2 = 0 > 1 ? c = c + 1 : d + 1;
System.out.println("c = " + c + ", d = " + d);
System.out.println("temp2 = " + temp2);
题4
char a = 'A';
int i = 0;
System.out.println((true ? a : 0) + "," + (false ? i : a));
下面先给出上面三道题的答案:
1、a = 2, b = 10temp1 = 1
2、c = 2, d = 10
temp2 = 2
3、c = 1, d = 10
temp2 = 11
4、A,65
题1,主要说明三目运算符只执行正确的那一个,temp1得到的值是a++,而a++赋值结果就是a,直到下一步a才变为a+1。
题2,无解释;题3, ,d+1 是可以看做(d+1 ),因为三目是赋值运算而不是运算表达式,所以+1不可能独立出来不需要括号的;
题4,65是因为 他们两个要转换成相同的类型,且是转换成true所在位置变量的类型
例如
float i = 0;int b =10;
System.out.println(false ?i : b);//10.0
二、关于执行顺序
//运算符内部 从左往右
int i=10;
int r =false?++i:100;
System.out.println(" i="+i);//i=10
// 两个三目运算符之间 从左到右
int i=10,j=10;
int r =true?i:true?++j:--j;
System.out.println(" r="+r+" i="+i +" j=" +j);// r=10 i=10 j=10
关于 如果是右结合,则应先执行true?++j:--j; j的输出应该是11
角落里找来的一句话:
一般来说,三目运算符的结合性是右结合的,
但是这点在ANSI C中并没有明确规定,
所以它的执行顺序有时是由编译器决定的