前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >JAVA中&&和&、||和|的区别?「建议收藏」

JAVA中&&和&、||和|的区别?「建议收藏」

作者头像
全栈程序员站长
发布于 2022-09-08 03:08:08
发布于 2022-09-08 03:08:08
5000
举报

大家好,又见面了,我是你们的朋友全栈君。

问题一:

JAVA中&&和&、||和|(短路与和逻辑与、短路或和逻辑或)的区别?

首先名称是不同的

&&逻辑与  ||逻辑或  它们都是逻辑运算符

& 按位与  | 按位或  它们都是位运算符

if(a==1&&b==2) 这是说既要满足a=1也要满足b=2

if(a==1||b==2) 这是说或者满足a=1或者要满足b=2

而a&b或者a|b则是二进制的与或运算

&同为1时为1,否则为0

|同为0时为0,否则为1

3&5则

 0011

&0101

 0001

等于1

3|5则

 0011

|0101

 0111

等于7

&&逻辑与 也叫做短路与 因为只要当前项为假,它就不往后判断了,直接认为表达式为假

||逻辑或 也叫做短路或 因为只要当前项为真,它也不往后判断了,直接认为表达式为真

问题二: 关于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中逻辑运算短路的理解:

短路” 主要用于逻辑运算符中,即 “ ! && || “这三种运算符 短路 就是知如果左侧的表达式能确定运算后的结果,则不再计算右侧的表达式。 如(1>2)&&(2<3) 明明左侧已经为假 了,我 不用计算右侧我一定知道 此表达是为假,这样 就好似物理中的电流,当某处短路时,电流直接从一条路通过,而不再管另一条路。

看个例子:

public class Logic{ public static void main(String[] args){

int a = 1; int b = 1; if(a<b&&b<a++){ System.out.println(a>b&true); System.out.println(a); System.out.println(“this’s in my control”); } else{ System.out.println(“that’s impossible”); System.out.println(a); }

} }

此处由于a<b为假 ,所以 后面的b<a++不会执行 此处的结果为 that’s impossible 1 若假设a的初值为0,此时a<b成立,这时就要计算后面的值了 结果应该为和上面一样。

网上看见有人对 && 与 & 有点混淆,顺便说说我的理解 本来 & 是个 位运算符 也就是主要用来 做二进制运算的,如 010101&101010 = 000000

但它的特别之处在于它可以 进行 boolean值的运算 就像我上面写的 a>b&true

其实我想这追根究地 在于 boolean 在内存中是用一位二进制来表示的,故可以进行位运算 我们不能被表象所迷惑 ,认为这是逻辑运算 ,这样理解就根本不存在讨论短路的必要了。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/156813.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
知识改变命运 第三集:Java中的运算符
上述 + 和 < 等就是运算符,即:对操作数进行操作时的符号,不同运算符操作的含义不同。 作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量。Java中运算符可分为以下:算术运算符(+ - * /)、关系运算符(< > ==)、逻辑运算符、位运算符、移位运算符以及条件运算符等。
用户11319080
2024/10/17
820
知识改变命运 第三集:Java中的运算符
【Java SE语法篇】3.运算符
上述 + 和 < 等就是运算符,即:对操作数进行操作时的符号,不同运算符操作的含义不同。
爱敲代码的小杨.
2024/05/07
950
【Java SE语法篇】3.运算符
Java 操作符知多少
之前的文章 中介绍了 Java 变量和数据类型,那么如何对他们进行运算呢?这就要用到运算符的相关知识点了。所谓运算符,就是指 Java 中对变量或者字面量进行操作的符号。下面就来具体看看,常用的操作符。
村雨遥
2023/05/30
2230
Java 操作符知多少
Java基础教程(5)-Java中的运算符
算术运算符的运算数必须是数字类型。算术运算符不能用在布尔类型上,但是可以用在char类型上,因为实质上在Java中,char类型是int类型的一个子集。
JQ实验室
2024/04/23
1220
Java运算符详解
Java运算符用于执行各种操作,包括算术、比较、位运算、逻辑运算和赋值等。这些运算符允许程序员在代码中执行各种计算、判断和赋值任务,从而控制程序的流程和输出结果。掌握Java运算符的使用对于编写高效、准确的Java程序至关重要。
鲜于言悠
2024/05/24
850
Java运算符详解
Javase-3.运算符
2.如果混合使用,前置++先+1,然后使用变量+1之后的值,后置++则是先使用变量原来的值,运算结束再对结果+1
用户11369350
2024/11/19
400
Javase-3.运算符
《Monkey Java》课程3.0之运算符与表达式
###算术运算符: 关于算术运算符就不多说了,因为我大中国的教育是从小就学加减乘除。
GitOPEN
2019/01/29
3120
《Monkey Java》课程3.0之运算符与表达式
Java基础--运算符
== != < > <= >= 关系运算符的运算结果只会是 true false (boolean类型)
用户9996207
2023/01/13
4390
Java基础--运算符
【Java】——运算符详解
运算符是操作数据的基本工具,就像数学中的加减除运算符号,Java提供了丰富的运算符类型,可分为以下几类:
User_芊芊君子
2025/04/08
640
【Java】——运算符详解
《JavaSE-第三章》之运算符
注意: 逻辑运算符的操作数(操作数往往是关系运算符的结果)和返回值都是 boolean .
用户10517932
2023/10/07
1710
【Java】零基础语法笔记(一)变量常量运算符
Java 的关键字对 Java 的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等,关键字不能用作变量名、方法名、类名、包名
韩旭051
2020/06/28
3100
【JavaSE】运算符
2.增量运算符 += -= *= %= 3. 自增/自减运算符 ++ – 注意前置++和后置++的区别 如果单独使用,两者没有区别。
xxxflower
2023/04/16
2470
【JavaSE】运算符
Java基础-语法(下)
承接上文,本节继续介绍 java基础语法的剩余部分,包括 java的运算符、变量和关键字方面的内容。
reload
2024/01/13
2232
Java基础-语法(下)
【Java篇】算术如诗,逻辑似梦:Java 编程中的运算符探寻
在本篇文章中,我们将详细介绍 Java 中的运算符。运算符是构建程序的基石之一,它们决定了数据如何进行计算与转换。通过掌握 Java 中的各种运算符,你将能够在编程中灵活运用它们,编写出高效且简洁的代码。
半截诗
2025/03/08
940
【Java篇】算术如诗,逻辑似梦:Java 编程中的运算符探寻
《JavaSE》---5.<基础语法(java六大类运算符)>
运算符的优先级我们不必要去死记硬背。在不知道的情况下我们就加括号。先算括号里面的。
用户11288958
2024/09/24
1100
《JavaSE》---5.<基础语法(java六大类运算符)>
JAVA位运算等运算符总结
可以将boolean的true和false看作是1和0,这样&和|的意义就是按位与和按位或。
品茗IT
2020/08/06
6450
【Java】逻辑运算符详解:&&、|| 与&、 | 的区别及应用
在 Java 中,逻辑运算符通常用于布尔类型的数据,执行真或假的判断。常见的逻辑运算符有四种,它们分别是:
CSDN-Z
2025/02/19
2640
【Java】逻辑运算符详解:&&、|| 与&、 | 的区别及应用
Java之四 表达式和流程控制
视频课堂:https://edu.csdn.net/course/play/8222
张哥编程
2024/12/18
1030
【Java 基础篇】Java 运算符
在Java编程中,运算符是用于执行各种操作的符号。通过使用运算符,我们可以进行算术运算、逻辑运算、赋值操作等。本篇博客将围绕Java运算符展开讨论,并介绍不同类型的运算符以及它们的用法和注意事项。我们还将提供代码示例来说明这些概念的具体应用。
繁依Fanyi
2023/10/12
2750
Java基础系列(二):运算符
计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量。我们可以把运算符分成以下几组:
山禾说
2019/01/21
5290
相关推荐
知识改变命运 第三集:Java中的运算符
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档