逻辑与和短路与区别么!
很简单的,你就这么想,其实他们的功能都是一样的。
区别就在于:
拿你这个例子说 你这是先定义了boolean类型是吧,判断的是true or false 再执行的时候 a&b,我是指程序内部执行! 系统先判断a 如果是ture了 那咱们知道结果一定是true了,可是系统还要继续再判断 b 。然后输出才是true
而a&&b 同样判断a 在这里 如果a是true了。
系统不会再去判断b的值然后就输出 结果了。
就是说到这短路了。但如果a要是false的他就还会继续判断b 因为这是&&的关系不是//的关系.
再应用的时候主要就是以后做的程序大了,可能需要判断的表达式很长,才用这个就能节省很大的运算过程,才能让自己的程序快一些!
没有一样的,你就这样想好了,&比较笨,无论前面条件是否成立,它都会继续判断下面的条件,而&&比较聪明,前面如果成立了,就不再对后面进行判断了。
这样当两个条件都成立的时候,&的执行效率高,前面的条件不成立的时候,&&执行效率高!
例子:
public class Aa {
public static void main(String[] args) {
int i = 5 ;
if( i > 6 & ++i > 6 ){
System.out.println ( "这里使用&");
}
System.out.println( i );
}
}
这时候i的值为6;
public class Aa {
public static void main(String[] args) {
int i = 5 ;
if( i > 6 && ++i > 6 ){
System.out.println ( "这里使用&&");
}
System.out.println( i );
}
}
这时候i 的值为5;
拿分不容易啊!!
逻辑与和短路与算出来的结果的一样的。
但是短路与要比逻辑与更人心化,现在基本都用短路与。比喻
if(3<2&2>1&5>4&6>5&9>8&7>6)
这是逻辑与。
其实只要比较第一个就出结果了。但是它会一个个比较,直到结尾
如果用的是短路与就不同。他比较第一个。不满足,直接就不比较后面的了。
如果满足就比较第二个,如果第二个不满足也不比较后面的了。。
这样就省下很多时间。。。
这么说吧:A&B的话,无论A是否是真,它都会去判断B的。
A&&B的话,如果A是真的,它才会判断B,相反的,A是假的话,它就不去判断B了,直接认定是假了!
简而言之&&判断两边的是否同时成立,尽管前面的不成立,但是还要看后面的是否成立,而&判断时,若前面的不成立,就不看后面得了,直接是false,ok?