我们知道的if()括号内就是填写判断条件的。那到底这个判断条件会暗含什么玄机呢?
首先,让大家看一个很简单的程序,代码如下:
public class Main { public static void main(String[] args) { boolean first=false,second=false; if(false&&(second=true)) { System.out.println("enter if"); } System.out.println("first is "+first); System.out.println("second is "+second); } }
大家想想程序的输出结果是什么?大家会不会认为是:
first is false second is true
那我要告诉大家啦,其实这是错误的。first变量从声明、定义到使用,都没有进行修改过,所以firstis false这句是没有错的。错就错在了第二句secondistrue.因为大家认为在if(false&&(second=true))中,second进行的赋值,变为了true.但是整个if的判断条件是错误的。
其实second并没有再次赋值。因为在if(false&&(second=true))判断条件中的(second=true)根本就没有执行。那我就告诉你java虚拟机的真相吧。但java虚拟机检测到if(false&&(second=true))判断条件中的操作符为&&与操作时,首先判断&&与操作符左边的条件是否为false,如果是false,则不会在去判断右边的了,为什么呢?因为我们知道对于&&与操作,只要有一个是false,那么整个表达式就是false,所以左边false,就没有必要花费时间去判断右边的了。所以java虚拟机是不是很智能。那可能有写朋友就会问了?那要是||或操作符呢?if(true||(false))假如左边是true,那是不是右边也不会去判断了呢?是的,就是这样。只要能够很明确的知道整个表达式的值,就没有必要去计算多余的了。