怎么去投诉做网站的公司,东营城镇建设规划网站,营销策划公司名称,网页设计代码模板海贼王问题一#xff1a;JAVA中和、||和|#xff08;短路与和逻辑与、短路或和逻辑或#xff09;的区别#xff1f;
首先名称是不同的
逻辑运算符#xff1a;#xff06;#xff06;逻辑与 #xff5c;#xff5c;逻辑或 它们都是逻辑运算符
位运算…问题一JAVA中和、||和|短路与和逻辑与、短路或和逻辑或的区别
首先名称是不同的
逻辑运算符逻辑与 逻辑或 它们都是逻辑运算符
位运算符 按位与 按位或 它们都是位运算符 这是说既要满足也要满足 这是说或者满足或者要满足
可以用作逻辑与的运算符表示逻辑与and当运算符两边的表达式的结果都为true时整个运算结果才为true否则只要有一方为false则结果为false。
还具有短路的功能即如果第一个表达式为false则不再计算第二个表达式例如对于if(str ! null !str.equals(“”))表达式当str为null时后面的表达式不会执行所以不会出现NullPointerException
||可以作逻辑或运算符表示逻辑或or当运算符有一边为true时整个运算结果为true当第一个表达式为true时不再计算第二个表达式
而或者则是二进制的与或运算
同为时为否则为
同为时为否则为
则 等于
则 等于
逻辑与 也叫做短路与 因为只要当前项为假它就不往后判断了直接认为表达式为假
逻辑或 也叫做短路或 因为只要当前项为真它也不往后判断了直接认为表达式为真
问题二关于Java 中逻辑运算与位运算的区别具体到解一道题
题目出自Java2实用教程第三版却没有解释
程序如下图
运行结果如下
为什么 x,y,a,b 不是都在IF语句里都重新赋值了吗按道理全为真了y也该是20了吧用程序验证过了的确是这个结果
回答
逻辑运算符执行的是短路求值 所谓短路就是当参与运算的一个操作数已经足以推断出这个表达式的值的时候另外一个操作数有可能是表达式就不会 执行
比如 static boolean f1() { System.out.println( “function f1 called.” ); return true; } static boolean f2() { System.out.println( “function f2 called.” ); return false; } if ( false f1() ) {} // f1不会被调用 if ( true || f2() ){} // f2不会被调用
由于 要求它的参与操作的两个操作数都是布尔值真才得真所以只要得出其中一个为假那么另一部分的表达式就不会被求值在上面的例子中是f1()不会被调 用 同理由于||要求它的参与操作的两个操作数只要其中之一为真就得真所以只要得出其中一个为真那么另一部分也不会被求值在上面的例子中 是f2()不会被调用
这就是逻辑操作符所谓的“短路求值”
位操作没有这一特性所以不管那边的值是如 何任何参与运算的表达式都会被执行求值因此也就产生了你代码之中的结果了。
三、Java中逻辑运算短路的理解
短路” 主要用于逻辑运算符中即 “ ! || 这三种运算符 短路 就是知如果左侧的表达式能确定运算后的结果则不再计算右侧的表达式。 如12)(23) 明明左侧已经为假 了 我 不用计算右侧我一定知道 此表达是为假这样 就好似物理中的电流当某处短路时电流直接从一条路通过而不再管另一条路。
看个例子
public class Logic{public static void main(String[] args){int a 1;int b 1;if(ab ba){System.out.println(abtrue);System.out.println(a);System.out.println(thiss in my control);}else{System.out.println(thats impossible);System.out.println(a);}}
}此处由于ab为假 所以 后面的ba不会执行 此处的结果为
thats impossible
1若假设a的初值为0,此时ab成立这时就要计算后面的值了 结果应该为和上面一样。
网上看见有人对 与 有点混淆顺便说说我的理解 本来 是个 位运算符 也就是主要用来 做二进制运算的如 010101101010 000000
但它的特别之处 在于 它可以 进行 boolean值的运算 就像我上面写的 abtrue
其实我想这追根究地 在于 boolean 在内存中是用一位二进制来表示的故可以进行位运算 我们不能被表象所迷惑 认为这是逻辑运算 这样理解就根本不存在讨论短路的必要了。