众所周知,java中有个基本类型是boolean,仅有true和false两个值。
在平时判断语句中,通常这样使用
int a = 1; int b = 2; if(a == b){ System.out.print("true"); } else{ System.out.print("false"); } //最后会输出false
或者这样使用
int a = 1; int b = 2; System.out.print(a==b); //同样会输出false
那如果在if/while判断和输出命令中写类似a=b的赋值语句会怎么样呢?
首先来看if判断:
//方式1:赋值语句的参数为非boolean类型——报错,因为判断语句中只能输入boolean类型的参数 int a = 1; int b = 2; if(a=b){ System.out.print("true"); } else { System.out.print("false"); }
//方式2:赋值语句的参数为boolean类型——不报错 boolean flag1 = true; boolean flag2 = false; //分别执行下列四种场景,注意不要一次性执行,否则定义的"flag1 = true;flag2 = false;"会被覆盖,影响此次实验结果 //flag1=flag2 if(flag1=flag2){ System.out.print("true"); } else { System.out.print("false");//输出false } //flag2=flag2 if(flag2=flag2){ System.out.print("true"); } else { System.out.print("false");//输出false } //flag2=flag1 if(flag2=flag1){ System.out.print("true");//输出true } else { System.out.print("false"); } //flag1=flag1 if(flag1=flag1){ System.out.print("true");//输出true } else { System.out.print("false"); }
由上面4种场景分别执行结果来看,得出结论:if判断语句中赋值语句的结果,取决于等号右边的值,等号右边是true则判断语句为true,等号右边是false则判断语句为false。while可证结论一致。
接下来看下输出语句中写赋值语句的结果:
//方式1:赋值语句的参数为非boolean类型 int a = 1; int b = 2; //分别执行下列四种场景,注意不要一次性执行,否则定义的"int a = 1;int b = 2;"会被覆盖,影响此次实验结果 System.out.print(a=b);//输出2 System.out.print(b=b);//输出2 System.out.print(b=a);//输出1 System.out.print(a=a);//输出1 //方式1:赋值语句的参数为boolean类型 boolean flag1 = true; boolean flag2 = false; //分别执行下列四种场景,注意不要一次性执行,否则定义的"flag1 = true;flag2 = false;"会被覆盖,影响此次实验结果 System.out.print(flag1=flag2);//输出false System.out.print(flag2=flag2);//输出false System.out.print(flag2=flag1);//输出true System.out.print(flag1=flag1);//输出true
由上面4种场景分别执行结果来看,最终得出结论:
判断语句和输出语句中如果为赋值语句如a=b,最终结果取决于赋值语句等号右边的值