关于Boolean类型的值再赋值一个true或者false.

一段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");
  }
}

首先:可以得出Boolean类型在实际编译过程中都是转化为int类型进行底层运算的。



猜你喜欢

转载自blog.csdn.net/weixin_42370303/article/details/80557688