一段code:
boolean m = false;
if(m = false){
System.out.println("false");
}else{
System.out.println("true");
}
编译结果为true。
编译前思考:第一句:把Boolean类型变量m赋值为false; OK.没问题。
2:一个if语句:但if表达式中是再次对m变量进行赋值。而不是一个表达式。就想:那么这个if表达式的结果边是false了。输出结果应该是false.
然结果确是true。
根据结果反推if表达式中对m变量的赋值。可以看出。其实。他应该是对m变量和false进行了比较。两边都是false.那么结果为true。从而与编译结果相对应。
那么,此处if表达式的中的单=便有了歧义。
接下来,看下对.class文件反编译的结果。
import java.io.PrintStream;
class Demo1
{
public static void main(String[] paramArrayOfString)
{
int i = 0;
if ((i = 0) != 0)
System.out.println("false");
else
System.out.println("true");
}
}
{
public static void main(String[] paramArrayOfString)
{
int i = 0;
if ((i = 0) != 0)
System.out.println("false");
else
System.out.println("true");
}
}
首先:可以得出Boolean类型在实际编译过程中都是转化为int类型进行底层运算的。