java中if暗含的性能优化玄机

  我们知道的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并没有再次赋值。因为在iffalse&&(second=true))判断条件中的(second=true)根本就没有执行。那我就告诉你java虚拟机的真相吧。但java虚拟机检测到if(false&&(second=true))判断条件中的操作符为&&与操作时,首先判断&&与操作符左边的条件是否为false,如果是false,则不会在去判断右边的了,为什么呢?因为我们知道对于&&与操作,只要有一个是false,那么整个表达式就是false,所以左边false,就没有必要花费时间去判断右边的了。所以java虚拟机是不是很智能。那可能有写朋友就会问了?那要是||或操作符呢?if(true||(false))假如左边是true,那是不是右边也不会去判断了呢?是的,就是这样。只要能够很明确的知道整个表达式的值,就没有必要去计算多余的了。




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值