三目运算符,及其顺序

题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);
题3
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 = 10 
temp1 = 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中并没有明确规定, 所以它的执行顺序有时是由编译器决定的

你可能感兴趣的:(三目,运算符)