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

运算符&、&&和 | 、|| 的区别 一、逻辑运算符: &、&&和 | 、|| 作为逻辑运算符时。  1、& 和 &&:   两边有一边为false时,结果为false;两边同时为true时,结果才为true。(口诀:一假全假,同真为真)   1)&(逻辑与):当左边的表达式为false的时候,程序还是会执行右边的表达式,再得出false结果。   2)&&(短路... 阅读详情
问题一:



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 在内存中是用一位二进制来表示的,故可以进行位运算
我们不能被表象所迷惑 ,认为这是逻辑运算 ,这样理解就根本不存在讨论短路的必要了。

C++中运算符 &和&&、|和|| 的区别 简介:&&是逻辑与运算符,||是逻辑或运算符,都是逻辑运算符,两边只能是bool类型 &与| 既可以进行逻辑运算,又可以进行位运算,两边既可以是bool类型,又可以是数值类型区别:if (A && B) 如果 A 为 false ,整个表达式就为 false,不再计算 B 的值了。 if (A & B) 如果 A 为 false ,整个表达式就为 false,但还要计算 B 的值。 if 阅读详情

相关推荐

Java中&与&&、|与||的区别详

运算对象用于整数的位运算,&&用于布尔表达式的逻辑运算。短路特性&&具有短路特性,没有。性能影响&&可能提高性能,因为它可能避免不必要的计算。运算对象用于整数的位运算,||用于布尔表达式的逻辑运算。短路特性||具有短路特性,没有。性能影响||可能提高性能,因为它可能避免不必要的计算。与&&是位与运算符,用于整数的位运算。&&是逻辑与运算符,用于布尔表达式,具有短路特性。与||是位或运算符,用于整数的位运算。||是逻辑或运算符,用于布尔表达式,具有短路特性。短路特性&&和||

C_V_Better的博客 733

Java逻辑运算符(&&、||和!),Java关系运算符

逻辑运算符把各个运算的关系表达式连接起来组成一个复杂的逻辑表达式,以判断程序中的表达式是否成立,判断的结果是 true 或 false。逻辑运算符是对布尔型变量进行运算,其结果也是布尔型,具体如表 1 所示。注意:短路与(&&)和短路或(||)能够采用最优化的计算方式,从而提高效率。在实际编程时,应该优先考虑使用短路与和短路或。结果为 boolean 型的变量或表达式可以通过逻辑运算符结合成为逻辑表达式。逻辑运算符 &&、|| 和!按表 2 进行逻辑运算。

weixin_42673574的博客 1万+

C# emgu.cv图像识别 从大图中寻找小图,判断存在图的相似度

这是2个问题,我采用emgu.cv来解决这个识别问题,这里需要在nuget中引用emgu。最近写了一个在一张图片中,截取一部分,通过机器判断截取图片是这张图片的。第一、通过小图去找判断是否存在大图中,第二、小图存在大图的什么位置。

一个专注于技术研究创新的程序员 2467

运算符“||”与“|”,“&&”和“&”的区别 (附带各类位运算符号详解(&、|、^、~、<<、>>、>>>)

区别一: 定义不同: || 和 | 都是表示“或”,区别是||只要满足第一个条件,后面的条件就不再判断,而|要对所有的条件进行判断。 区别二: 与操作和或操作的区别 (1)在Java程序中,使用与操作,要求所有表达式的判断结果都是TRUE,才为真,若有一个为FALSE,那么最终判断结果则为FALSE (2)使用或操作,只要其中有一个表达式为TRUE,那么最终的结果就为TRUE,只有当所有的表达式为FALSE时最终结果才为FALSE 区别三: 实际含义不同: “||”: 如果左边计算后的操作数为true,

Koikoi12的博客 10万+

电流采样电路设计:差分放大与ADC采集详解

在电机控制、电源管理、电池监测等应用中,电流采样是一个关键环节。通常,我们使用小阻值的采样电阻将电流信号转换为电压信号,再通过运放放大后送入ADC进行采集。本文将详细分析一种基于差分放大器的电流采样电路,包括信号放大、参考电压偏置、滤波保护以及ADC转换计算等内容。

W0s477的博客 2万+

AURIX™ TC3xx 调试口保护 secure debug

AURIX™ TC3xx 调试口保护 secure debug UCB_DBG_ORIG and UCB_DBG_COPY Content 使用Debug Password 保护调试接口设置 项目硬件接口保护方案 hexview Lock using UDE Unlockusing UDE Lock using Lauterbach Unlock using Lauterbach

2301_76563067的博客 6857

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

问题一: JAVA中&&和&、||和|(短路与和逻辑与、短路或和逻辑或)的区别? 首先名称是不同的 &&逻辑与  ||逻辑或  它们都是逻辑运算符 & 按位与  | 按位或  它们都是位运算符 if(a==1&&b==2) 这是说既要满足a=1也要满足b=2 if(a==1||b==2) 这是说或者满足a=1或者要满足b=2 而a&b或者a|b则是二进制的与或运算 &同为

Solo_two的博客 3万+

LLC谐振变换器中的软开关艺术:ZVS与ZCS的协同设计

本文深入解析了LLC谐振变换器如何通过巧妙的电路设计,协同实现零电压开关(ZVS)与零电流开关(ZCS),从而大幅降低开关损耗与电磁干扰,提升电源效率。文章结合设计实战,详细阐述了谐振参数计算、器件选型及调试避坑指南,为高效、高功率密度电源设计提供了核心思路与解决方案。

weixin_29216957的博客 350

【Java】逻辑运算符详解:&&、|| 与&、 | 的区别及应用

在 Java 编程中,逻辑运算符是非常常见且重要的组成部分。它们主要用于布尔值的操作,帮助我们进行条件判断与控制流程。而 Java 中常见的逻辑运算符包括 与(AND) 和 或(OR) 运算符,分别有短路与非短路版本。对于开发者而言,理解这些运算符的工作机制及其应用场景,能够提升代码的效率、可读性与可维护性。本篇文章将深入探讨 Java 中的&&||和这四种运算符,分析它们的不同特点、使用场景以及对程序执行效率的影响 2025.2.18-✍58min

禅宗里有一个词叫做“因缘和合”。 所谓因缘,是指事件要发生所必须的条件。因缘和合就是当你聚集了这件事的一切条件,它就会自然而然的发生。“它就会自然而然的发生”,这种朴素而坚定的价值观让我们感到无比安心,安心到可以不用有任何担心焦虑。 2639

飞牛fnNAS虚拟机开启OVS导致失联的解决

摘要:用户在使用飞牛NAS时发现开启OVS网络功能后导致NAS失联。通过多种尝试(包括开关OVS、更换系统版本、手工配置、更换网卡、处理器检查等)后发现,OVS启用状态下DHCP无法获取IP地址,手动设置IP可暂时恢复网络。但重启后问题依旧,初步判断为OVS功能存在bug。目前临时解决方案是在需要时手动开关OVS,或考虑其他虚拟化方案。用户计划后续探索替代方案,并等待官方修复该问题。

dgnankai的专栏 4334

解决gradle下载慢的问题

allprojects块的repositories用于多项目构建,为所有项目提供共同所需依赖包。而子项目可以配置自己的repositories以获取自己独需的依赖包。buildScript块的repositories主要是为了Gradle脚本自身的执行,获取脚本依赖插件。根级别的repositories主要是为了当前项目提供所需依赖包。慢的问题在于下载时链接的是官网,而官网下载速度太慢;1、解决gradle不同版本下载慢的问题。但是这个镜像站的版本不全,低版本可以用;有公司做的国内镜像站;

weixin_42551921的博客 2052

Java |与|| 、&与&& ,或与非的使用和区别

目录 前言 一、“与”和“或”的定义区别 二、&amp;、&amp;&amp;使用和区别 三、|、||的使用和区别 前言 在平时的开发工作当中,经常会使用到if判断,当满足某一个或多个条件下就可以继续往下执行。在java中是使用|、||(或) 、&amp;、&amp;&amp;(与)的代码符号来表示。下面一起来看他们的具体使用,分析他们之间的区别。 一、“与”和“或”的定义区...

csdn_aiyang的博客 12万+

OpenClaw 多代理协同工作模式配置指南

OpenClaw 采用。

形上得其象,形下合于数;阴阳自济,玄理自明。 1万+

Java中,&&与&,||与|的区别

&若第一个条件不满足,后面条件就不再判断。

mingyuli的博客 2万+

PCL 平面点云的凹多边形边界提取【2025最新版】

平面点云的凹多边形边界提取及边界轮廓线绘制。博客长期更新,本文最近更新时间为:2025年1月6日。

点云侠的博客 7183

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

JAVA中&&和&、||和|的区别?

问题一:JAVA中&amp;&amp;和&amp;、||和|(短路与和逻辑与、短路或和逻辑或)的区别? 首先名称是不同的 逻辑运算符:&&逻辑与  ||逻辑或  它们都是逻辑运算符 位运算符:& 按位与  | 按位或  它们都是位运算符 if(a==1&&b==2) 这是说既要满足a=1也要满足b=2 if(a==1||b==2) 这是说或者满足a=1或者要满足b=2 &amp;&amp;可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,

qq_43842093的博客 2149

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

java基础 布尔逻辑表达式 &&与&、||与|区别总结

java 基础、自学记录。避免遗忘; 逻辑与:&amp;&amp;和&amp;,逻辑或:||和|,逻辑非:!。 &amp;&amp;和&amp;区别?||和|区别? &amp;&amp;和||具有短路效果。也就是说在执行过程中,前面的表达式满足条件后就会停止本条语句执行。&amp;和|则不具备短路效果。 直接上实例: /** * 逻辑运算符测试 */ public class Op...

这只是一个博客 5276

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Java中&、|、&&、||详解

1、Java中&叫做按位与,&&叫做短路与,它们的区别是: & 既是位运算符又是逻辑运算符,&的两侧可以是int,也可以是boolean表达式,当&两侧是int时,要先把运算符两侧的数转化为二进制数再进行运算,而短路与(&&)的两侧要求必须是布尔表达式。举例如下: 12&5 的值是多少?答:12转成二进制数是1100(前四位省略了),5转成二进制数是0101,则运算后的结果为0100即

sum_TW的博客 8万+

Java中的&&与&、||与|

逻辑运算符用于操作两个布尔类型的变量或常量。逻辑运算符主要有6个:&amp;&amp;(与)、&amp;(不短路与)、||(或)、|(不短路或)、!(非)、^(异或) 此文主要讲&amp;&amp;与&amp;、||与|的区别。 &amp;&amp;与&amp; &amp;&amp;:与,前后两个操作数必须都为true才返回true,否则返回false。它是先计算左边的操作数,如果左边的操作...

天涯~的博客 8452
上一篇: java对象转换String类型的三种方法
下一篇: Java的可变参数列表
普通网友
博客等级 码龄12年 15粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值