Java逻辑运算符(、||和!),Java关系运算符
逻辑运算符把各个运算的关系表达式连接起来组成一个复杂的逻辑表达式,以判断程序中的表达式是否成立,判断的结果是 true 或 false。
逻辑运算符是对布尔型变量进行运算,其结果也是布尔型,具体如表 1 所示。
运算符 | 用法 | 含义 | 说明 | 实例 | 结果 |
---|---|---|---|---|---|
&& | a&&b | 短路与 | ab 全为 true 时,计算结果为 true,否则为 false。 | 2>1&&3<4 | true |
|| | a||b | 短路或 | ab 全为 false 时,计算结果为 false,否则为 true。 | 2<1||3>4 | false |
! | !a | 逻辑非 | a 为 true 时,值为 false,a 为 false 时,值为 true | !(2>4) | true |
| | a|b | 逻辑或 | ab 全为 false 时,计算结果为 false,否则为 true | 1>2|3>5 | false |
& | a&b | 逻辑与 | ab 全为 true 时,计算结果为 true,否则为 false | 1<2&3<5 | true |
- && 与 & 区别:如果 a 为 false,则不计算 b(因为不论 b 为何值,结果都为 false)
- || 与 | 区别:如果 a 为 true,则不计算 b(因为不论 b 为何值,结果都为 true)
注意:短路与(&&)和短路或(||)能够采用最优化的计算方式,从而提高效率。在实际编程时,应该优先考虑使用短路与和短路或。
结果为 boolean 型的变量或表达式可以通过逻辑运算符结合成为逻辑表达式。逻辑运算符 &&、|| 和 !按表 2 进行逻辑运算。
a | b | a&&b | a||b | !a |
---|---|---|---|---|
true | true | true | true | false |
false | true | false | true | true |
true | false | false | true | false |
false | false | false | false | true |
逻辑运算符的优先级为:!运算级别最高,&& 运算高于 || 运算。!运算符的优先级高于算术运算符,而 && 和 || 运算则低于关系运算符。结合方向是:逻辑非(单目运算符)具有右结合性,逻辑与和逻辑或(双目运算符)具有左结合性。
下面是一些使用逻辑运算符的示例。
- x>0 && x<=100 // 第一行语句
- y%4==0 || y%3==0 // 第二行语句
- !(x>y) // 第三行语句
其中,第一行语句用于判断 x 的值是否大于 0 且小于或等于 100,只有两个条件同时成立结果才为真(true)。第二行语句用于判断 y 的值是否能被 4 或者 3 整除,只要有一个条件成立,结果就为真(true)。第三行语句先比较 x 和 y,再将比较结果取反,即如果 x 大于 y 成立,则结果为假(false),否则为真(true)。
Java关系运算符
关系运算符(relational operators)也可以称为“比较运算符”,用于用来比较判断两个变量或常量的大小。关系运算符是二元运算符,运算结果是 boolean 型。当运算符对应的关系成立时,运算结果是 true,否则是 false。
关系表达式是由关系运算符连接起来的表达式。关系运算符中“关系”二字的含义是指一个数据与另一个数据之间的关系,这种关系只有成立与不成立两种可能情况,可以用逻辑值来表示,逻辑上的 true 与 false 用数字 1 与 0 来表示。关系成立时表达式的结果为 true(或 1),否则表达式的结果为 false(或 0)。表 1 给出了比较运算符的含义及其实例应用。
运算符 | 含义 | 说明 | 实例 | 结果 |
---|---|---|---|---|
> | 大于运算符 | 只支持左右两边操作数是数值类型。如果前面变量的值大于后面变量的值, 则返回 true。 | 2>3 | false |
>= | 大于或等于运算符 | 只支持左右两边操作数是数值类型。如果前面变量的值大于等于后面变量的值, 则返回 true。 | 4>=2 | true |
< | 小于运算符 | 只支持左右两边操作数是数值类型。如果前面变量的值小于后面变量的值,则返回 true。 | 2<3 | true |
<= | 小于或等于运算符 | 只支持左右两边操作数是数值类型。如果前面变量的值小于等于后面变量的值, 则返回 true。 | 4<=2 | false |
== | 相等运算符 | 如果进行比较的两个操作数都是数值类型,无论它们的数据类型是否相同,只要它们的值相等,也都将返回 true。 如果两个操作数都是引用类型,只有当两个引用变量的类型具有父子关系时才可以比较,只要两个引用指向的不是同一个对象就会返回 true。 Java 也支持两个 boolean 类型的值进行比较。 | 4==4 97=='a' 5.0==5 true==false | true true true false |
!= | 不相等运算符 | 如果进行比较的两个操作数都是数值类型,无论它们的数据类型是否相同,只要它们的值不相等,也都将返回 true。 如果两个操作数都是引用类型,只有当两个引用变量的类型具有父子关系时才可以比较,只要两个引用指向的不是同一个对象就会返回 true。 | 4!=2 | true |
注意点如下所示:
- 基本类型的变量、值不能和引用类型的变量、值使用 == 进行比较;boolean 类型的变量、值不能与其他任意类型的变量、值使用 == 进行比较;如果两个引用类型之间没有父子继承关系,那么它们的变量也不能使用 == 进行比较。
- == 和 != 可以应用于基本数据类型和引用类型。当用于引用类型比较时,比较的是两个引用是否指向同一个对象,但当时实际开发过程多数情况下,只是比较对象的内容是否相当,不需要比较是否为同一个对象。
关系运算符的优先级为:>、<、>=、<= 具有相同的优先级,并且高于具有相同优先级的 !=、==。关系运算符的优先级高于赋值运算符而低于算术运算符,结合方向是自左向右。
关系表达式通常用于 Java 程序的逻辑判断语句的条件表达式中。使用关系表达式要注意以下几点:
- 运算符 >=、==、!=、<= 是两个字符构成的一个运算符,用空格从中分开写就会产生语法错误。例如
x> =y;
是错误的,但是可以写成x >= y;
在运算符的两侧增加空格会提高可读性。同样将运算符写反,例如 =>、=<、=! 等形式会产生语法错误。 - 由于计算机内存放的实数与实际的实数存在着一定的误差,如果对浮点数进行 ==(相等)或 !=(不相等)的比较,容易产生错误结果,应该尽量避免。
- 不要将“==”写成“=”。
下面是一些使用关系运算符的示例。
- a > b // 比较变量a的值是否大于变量b的值
- x+y> = z // 比较变量x与变量y的和是否大于或等于变量z的值
- width * width+size != area // 比较变量width的平方加上变量size的值是否与变量area的值不相等
- name == "zhht" // 比较变量name的值是否等于字符串nzht
- pass != "123456" // 比较变量pass的值是否不等于字符串“123456”
例 1
编写一个程序,使用户可以从键盘输入两个数,并判断这两个数之间的大小。 实现代码如下:
- public static void main(String[] args) {
- int number1, number2; // 定义变量,保存输入的两个数
- System.out.print("请输入第一个整数(number1):");
- Scanner input = new Scanner(System.in);
- number1 = input.nextInt(); // 输入第一个数
- System.out.print("请输入第二个整数(number2):");
- input = new Scanner(System.in);
- number2 = input.nextInt(); // 输入第二个数
- System.out.printf("number1=%d,number2=%d\n", number1, number2); // 输出这两个数
- // 判断用户输入的两个数是否相等
- if (number1 == number2) {
- System.out.println("number1 和 number2 相等。");
- }
- // 判断用户输入的两个数据是否相等
- if (number1 != number2) {
- System.out.println("number1 和 number2 不相等。");
- // 判断用户输入的数1是否大于数2
- if (number1 > number2) {
- System.out.println("number1 大于 number2。");
- }
- // 判断用户输入的数1是否小于数2
- if (number1 < number2) {
- System.out.println("number1 小于 number2。");
- }
- }
- }
保存程序并运行,运行结果如下所示:
图 1 运行结果
在本程序中,使用 input.nextInt() 接收用户从键盘输入的两个数,然后通过关系运算符来比较这两个数之间的大小。这里用到了 if 语句,它是一个流程控制语句,将在后面的章节中详细讲解。
相关文章:

Java逻辑运算符(、||和!),Java关系运算符
逻辑运算符把各个运算的关系表达式连接起来组成一个复杂的逻辑表达式,以判断程序中的表达式是否成立,判断的结果是 true 或 false。 逻辑运算符是对布尔型变量进行运算,其结果也是布尔型,具体如表 1 所示。 表 1 逻辑运算符的用…...

三个设备文件
...

Java赋值运算符(=)
赋值运算符是指为变量或常量指定数值的符号。赋值运算符的符号为“”,它是双目运算符,左边的操作数必须是变量,不能是常量或表达式。 其语法格式如下所示: 变量名称表达式内容 在 Java 语言中,“变量名称”和“表达式…...

提升药店效率:山海鲸医药零售大屏的成功案例
在医药行业中,特别是医药零售领域,高效的药品管理和客户服务至关重要。随着科技的飞速发展,数字化解决方案已经成为提高医药零售管控效率的有效工具之一。其中,医药零售管控大屏作为一种强大的工具,正在以独特的方式改…...
使用Fragement(碎片)
一、Fragment简介 屏幕大小的差距可能会使同样的界面在不同设备上显示出不同的效果,为了能同时兼顾到手机和平板电脑的开发,从Android3.0版本开始提供了Fragment。 Fragment(碎片)是一种嵌入在Activity中的UI片段,它…...
种花问题(Python题目)
假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。 给你一个整数数组 flowerbed 表示花坛,由若干 0 和 1 组成,其中 0 …...

STM32入门F4
学习资料:杨桃电子,官网:洋桃电子 | 杜洋工作室 www.doyoung.net 嵌入式开发核心宗旨:以最适合的性能、功能、成本来完成最有性价比的产品开发。 1.为什么要学F407 STM32F103系列与STM32F407系列对照表: 2.F4系列命…...

【30】c++设计模式——>状态模式
状态模式概述 状态模式是一种行为型设计模式,它可以让一个对象在其内部状态发生变化时更改其行为。通过将每个状态封装成一个独立的类,我们可以使状态之间互相独立,并且使得状态的切换变得更加灵活、可扩展。(多个状态之间可以相…...

中文编程开发语言编程实际案例:程序控制灯电路以及桌球台球室用这个程序计时计费
中文编程开发语言编程实际案例:程序控制灯电路以及桌球台球室用这个程序计时计费 上图为:程序控制的硬件设备电路图 上图为:程序控制灯的开关软件截图,适用范围比如:台球厅桌球室的计时计费管理,计时的时候…...
【python】高斯日记
题目: """ 题目描述: 高斯出生于1777年4月30日,记作1777-4-30。在此基础上,我们希望你写一个程序,给定一个数字n,表示从高斯出生的那天算起的第n天,输出这一天的具体日期。例如&…...
[论文笔记]MobileBERT
引言 今天带来一篇关于量化的论文MobileBERT,题目翻译过来是:一种适用于资源有限设备的紧凑型任务无关BERT模型。模型的简称是MobileBERT,意思是作者的这个BERT模型可以部署到手机端。 本篇工作,作者提出了MobileBERT用于压缩和加速BERT模型。与原始BERT一样,MobileBERT…...

【Spring Cloud】如何确定微服务项目的Spring Boot、Spring Cloud、Spring Cloud Alibaba的版本
文章目录 1. 版本选择2. 用脚手架快速生成微服务的pom.xml3. 创建一个父工程4. 代码地址 本文描述如何确定微服务项目的Spring Boot、Spring Cloud、Spring Cloud Alibaba的版本。 1. 版本选择 我们知道Spring Boot、Spring Cloud、Spring Cloud Alibaba的版本选择一致性非常重…...

Power BI 傻瓜入门 1. 数据分析术语:Power BI风格
本章内容包括: 了解Power BI可以处理的不同类型的数据了解您的商业智能工具选项熟悉Power BI术语 数据无处不在。从你醒来的那一刻到你睡觉的时候,某个系统会代表你收集数据。即使在你睡觉的时候,也会产生与你生活的某些方面相关的数据。如…...

【C++和数据结构】位图和布隆过滤器
目录 一、位图 1、位图的概念 2、位图的实现 ①、基本结构 ②、set ③、reset: ④、test ⑤、问题: ⑥、位图优缺点及应用: ⑦、完整代码及测试 二、布隆过滤器 1、布隆过滤器的提出 2、布隆过滤器的实现 ①、基本结构 ②…...
Mybatis分页
本文主要讲解Mybatis分页相关的技术分享,如果觉得不错的话,就点个赞吧。。。。 Mybatis分页主要有2种类型: 一、物理分页: 1、定义: 物理分页是在数据库层面进行的分页,即通过SQL语句直接从数据库中查询…...

手写SVG图片
有时候QT中可能会需要一些简单的SVG图片,但是网上的质量参差不齐,想要满意的SVG图片,我们可以尝试直接手写的方法. 新建文本文档,将以下代码复制进去,修改后缀名为.svg,保存 <?xml version"1.0" encoding"utf-8"?> <svg xmlns"http://www…...

LVS负载均衡及LVS-NAT模式
一、集群概述 1.1 集群的背景 集群定义:为解决某个特定问题将多个计算机组合起来形成一个单系统 集群目的:为了解决系统的性能瓶颈 集群发展历史: 垂直扩展:向上扩展,增加单个机器的性能,即升级硬件 水…...

【Java集合类面试八】、 介绍一下HashMap底层的实现原理
文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官: 介绍一下HashMap底层的…...

linux 安装操作 redis
1、redis概述和安装 1.1、安装redis 1. 下载redis 地址 https://download.redis.io/releases/ 2. 将 redis 安装包拷贝到 /opt/ 目录 3. 解压 tar -zvxf redis-6.2.1.tar.gz4. 安装gcc yum install gcc5. 进入目录 cd redis-6.2.16. 编译 make7. 执行 make install 进…...

博客后台模块续更(五)
十一、后台模块-菜单列表 菜单指的是权限菜单,也就是一堆权限字符串 1. 查询菜单 1.1 接口分析 需要展示菜单列表,不需要分页。可以针对菜单名进行模糊查询。也可以针对菜单的状态进行查询。菜单要按照父菜单id和orderNum进行排序 请求方式 请求路径…...

第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...

现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...
关于uniapp展示PDF的解决方案
在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项: 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库: npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...