11、关系运算符、逻辑运算符(讲解 和 的区别)、赋值表达式、三目表达式、运算符优先级(超详细版本)+结合性的分析

这里写目录标题

  • 一、关系运算符(比较运算符)
  • 二、⭐逻辑运算符
    • 1、 && 和 &
    • 2、|| 或 |
    • 3、!
    • 4、^
  • 三、赋值运算符
  • 四、三目运算符(条件运算符)
  • 五、运算符优先级

在讲之前先明确几个概念:
1、单目运算符是只有一个变量(or 常量)在左侧或者右侧的,而双目运算符是左右两边都有变量(or 常量)的,eg:10、算数运算符(以 ‘/’、‘%’、‘++’为主去讲解)(Java超详细版本)这篇文章中,a++、–a是单目运算符,而a + b、a % b是双目运算符,今天的文章中“?:”是三目运算符。
 
2、Java中运算顺序大部分都是从左往右的(左结合性),只有单目运算符、赋值运算符和三目运算符是从右往左的(右结合性),敲重点啦,就我个人理解而言,所谓的结合性是指两个或两个以上相同的运算符出现,才需要区分执行顺序(可能有歧义),赋值运算符和三目运算符看下面的文章即可,单目运算符的就不写了,差不多意思。

一、关系运算符(比较运算符)

关系运算符的结果都是boolean型,要么是true,要么是false,其常用在if结构的条件或者循环结构的条件中。
在这里插入图片描述
除了最后一个到面向对象的时候在详细讲解,其他都很简单,和数学上的差不多,就不花时间写了。
在这里插入图片描述

使用细节:
① “==”不能误写成“=”。
② 结果只能为true或者false。
③ 我们称a >= b、 a == b等为关系表达式。

二、⭐逻辑运算符

这里的&、|、^只研究结果是true和false的情况,不涉及位运算的情况,有兴趣的可以看一下:java中的“&”、“|”、“^”、“~”运算符怎么用?+ Java 运算符,我后期写进制的笔记的时候可能会再次详细介绍这方面,这里就先不介绍了,怕写文章写的很糊涂。
在这里插入图片描述
先直接来规则,其实你记住就可以了(背多芬):

名称语法特点
短路与 &&条件1 && 条件2两个条件都为true,结果为true,其余情况为false
逻辑与 &条件1 & 条件2同上
短路或 ||条件1 || 条件2只要有true就为true,没有true就为false
逻辑或 |条件1 | 条件2同上
取反!!条件如果条件本身成立,结果转变成false,否则为true
异或^条件1 ^ 条件2若两者不同则true,否则为false

1、 && 和 &

为什么Java中有“&&”和“&”呢?主要是因为应用场景不同,但是实际工作中&& 和 || 更常用。
&& 和 & 的使用区别:
Ⅰ、&&:如果第一个条件为false,则第二个条件不会进行判断,直接输出结果false,避免了不必要的条件评估,效率更高。
Ⅱ、&:不管第一个条件是否为false,第二个条件都要进行判断,效率低。

上代码:
在这里插入图片描述

从代码截图可以看出,两个if判断中都没有同时满足true的条件,所以执行不了if,改成执行else里面的语句。那么两者区别在哪呢?我们可以看到结果截图中,初始b = 2,c = 2,而最后b = 2,c却等于3了,这就是由于 && 左边的条件已经判断为false,不会再运行后面的条件,导致b没有变化,而&不管左边是不是false,都要执行右边的条件,所以c变化为3了。

2、|| 或 |

|| 和 | 的使用区别:
Ⅰ、||:如果第一个条件为true,则第二个条件不会进行判断,直接输出结果true,避免了不必要的条件评估,效率更高。
Ⅱ、|:不管第一个条件是否为true,第二个条件都要进行判断,效率低。
(和上面一样的道理,不举例子了。)

3、!

其实就是取反,!true --> false,!false --> true。
在这里插入图片描述

4、^

异或异或,必须左右要异才行,所以异就会有true,否则为false。
在这里插入图片描述
下面是韩顺平老师出的几道题,大家可以练练手:

int x = 5;
int y = 5;
if( x++ == 6 & ++y == 6)
	x = 11;
System.out.println("x = " + x + ", y = " + y);		//x=6, y=6

int x = 5;
int y = 5;
if( x++ == 6 && ++y == 6)
	x = 11;
System.out.println("x = " + x + ", y = " + y);		//x=6, y=5

int x = 5;
int y = 5;
if( x++ == 5 | ++y == 5)
	x = 11;
System.out.println("x = " + x + ", y = " + y);		//x=11, y=6

int x = 5;
int y = 5;
if( x++ == 5 || ++y == 5)
	x = 11;
System.out.println("x = " + x + ", y = " + y);		//x=11, y=5

boolean x = true;
boolean y = false;
short z = 46;
if( (z++ == 46) && (y = true))
	z++;
if( (x=false) || (++z == 49))		//记住“||”左边是false的时候,要判断右边是否为true/false
	z++;
System.out.println("z = " + z);		//50

(答案在语句后面,要记住上面的规则哦,若想不出来可以在评论区提问)

三、赋值运算符

单一的赋值是 “=”,下面的图片上是复合赋值运算符。
在这里插入图片描述
其实很简单,提示一下上面的<<、>>>、&等的是位运算,有学过进制的可以看这个链接了解:
Java运算符 | 菜鸟教程

使用细节:
① a += 3 等价于 a = a+3,其他也一样。
② 复合赋值运算符会进行类型转换。

byte b = 2;
b += 3;     //其实质:b = (byte)(b+3)
b++;        //b = (byte)(b+1)

什么意思呢?我们之前在类型转换的文章中就提过,byte、short、char任意组合最终得到的结果类型都为int型,这是没错的,但是赋值运算符会将这个结果强制转换成做左边变量本身的类型(前提是不超过精度范围),所以最终 int --> byte。
③ 运算顺序从右往左(右结合),请看图片。
图1是简单运用(可能和上边结合性的那段话有点矛盾,那就看第二张图吧)
在这里插入图片描述
图2是我觉得能代表右结合性的例子,我们能运用就行,不必太纠结概念。
在这里插入图片描述

四、三目运算符(条件运算符)

基本语法:条件表达式 ? 表达式1 : 表达式2
运算规则:
Ⅰ、如果条件表达式为true,运算后的结果是表达式1,表达式2不会执行。
Ⅱ、如果条件表达式为false,运算后的结果是表达式2,表达式1不会执行。
直接看代码理解喽:
在这里插入图片描述
使用细节:
① 表达式1和表达式2的结果要符合左边变量的精度范围,超过就会报错。
②三目运算符本质上是 if – else --语句

int result = a > b ? a++ : b--;

//等价于
if(a > b)
	result = a++;
else
	result = b--;

③韩顺平老师的课上说三目运算符是从左往右的,但是我查资料的时候觉得不是,所以我还是按照自己的理解来,就认为三目运算符是从右往左的(右结合性)。
在这里插入图片描述

五、运算符优先级

1、运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。
 Ⅰ、从上往下优先级降低,第一行优先级最高,如果想提升优先级可以用(),最后一行优先级最低。
 Ⅱ、若同行的出现在表达式中,按照左边的 L->R 或者 R->L 进行计算即可。
2、只有单目运算符,赋值运算符、三目运算符是从右往左运算的。

在这里插入图片描述

本人正在B站跟着韩顺平老师学Java(非广告),所以做个笔记仅供学习,文章虽标为原创,但大体思路是韩顺平老师的授课思路,在此基础上加上了自己的理解,不喜勿喷哦。
大家一起学,一起进步!!
各位宝子们如果觉滴还不错的话,可以点个赞 or 收个藏 or 打个赏哦,佛系博主一个。
今天吃钵钵鸡啦哈哈哈哈哈哒!!!干饭去。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/617692.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Arduino】ESP32/ESP8266 JSON格式解析

目录 1、JSON 2、JSON语法格式 基本概念&#xff1a; 语法规则&#xff1a; 数据类型&#xff1a; 示例&#xff1a; 3、JSON解析 单一对象JSON解析&#xff08;无嵌套&#xff09; JSON数组解析 使用ArduinoJson官网在线工具解析JSON信息 ESP8266闪存存储的JSON解析…

VScode 修改 Markdown Preview Enhanced 主题与字体

VScode 修改 Markdown Preview Enhanced 主题与字体 1. 修改前后效果对比2. 修改主题2.1 更改默认主题2.2 修改背景色 3. 修改字体 VS Code基础入门使用可查看&#xff1a; VS Code 基础入门使用&#xff08;配置&#xff09;教程 其他Vs Code 配置可关注查看&#xff1a; Vs C…

ElasticSearch 与 OpenSearch:拉开性能差距

Elasticsearch 与 OpenSearch&#xff1a;扩大性能差距 对于任何依赖快速、准确搜索数据的组织来说&#xff0c;强大、快速且高效的搜索引擎是至关重要的元素。对于开发人员和架构师来说&#xff0c;选择正确的搜索平台可以极大地影响您的组织提供快速且相关结果的能力。在我们…

docker(二):Centos安装docker

文章目录 1、安装docker2、启动docker3、验证 官方文档&#xff1a;https://docs.docker.com/engine/install/centos/ 1、安装docker 下载依赖包 yum -y install gcc yum -y install gcc-c yum install -y yum-utils设置仓库 yum-config-manager --add-repo http://mirrors…

在xAnyLabeling中加载自己训练的yolov8s-obb模型进行半自动化标注

任务思路&#xff1a; 先使用xAnyLabeling标注一部分样本&#xff0c;训练出v1版本的yolov8-obb模型&#xff0c;然后加载yolov8-obb模型到xAnyLabeling中对其余样本进行半自动化标注。节省工作量。 任务流程&#xff1a; 1.准备xAnyLabeling标注工具 下载代码&#xff0c;…

Linux 第二十八章

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…

利用PS在不伤背景的前提下根据颜色去除图像上不想要的内容

下面为一个例子&#xff0c;去除图像上红色的虚线 Step1.用套索工具框选带有颜色的部分 Step2.切换到魔术棒工具&#xff0c;上端选项中&#xff0c;点击与选区交叉&#xff0c;连续这一项不要勾选 Step3.在需要去除的部分点击一下即可在框选范围内选中所有同颜色的区域&#x…

【IC前端虚拟项目】验证环境env与base_teat思路与编写

【IC前端虚拟项目】数据搬运指令处理模块前端实现虚拟项目说明-CSDN博客 上一篇里解决了最难搞的axi_ram_model,接下来呢就会简单又常规一些了,比如这一篇要说的env和base_test的搭建。在这里我用了gen_uvm_tb脚本: 【前端验证】验证自动化脚本的最后一块拼图补全——gen_t…

Cross-Image Attention for Zero-Shot Appearance Transfer——【代码复现】

本文发表于SIGGRAPH 2024&#xff0c;是一篇关于图像编辑的论文&#xff0c;Github官网网址如下&#xff1a; garibida/cross-image-attention&#xff1a; “Cross-Image Attention for Zero-Shot Appearance Transfer”的正式实现 (github.com) 一、基本配置环境准备 请确保…

数组实现循环队列

1、分析 循环队列最主要的特点为当前面的空间被pop后&#xff0c;后面的数据可以插入到前面空余的数据中去&#xff1b; 所以最难的部分为判断什么时候为空什么时候为满&#xff1a; a、空满问题 我们先来分析当数据满时&#xff0c;head和tail相等&#xff08;tail认为是指…

架构设计之学新而知故

缘由 因为一些特殊的机缘&#xff0c;接触到洋葱架构等一些新架构设计概念。 尝试理解了一段时间&#xff0c;就想简单梳理下对它们的理解&#xff0c;以达到学新而知故 &#x1f603; 信息增益 以前计算机专业并不设置通信领域的信息论的专业课程&#xff0c;但是&#xf…

条件变量解决同步问题之打印金鱼

说明 本代码为jyy老师上课演示条件变量解决同步问题示例(本人只做记录与分享) 本人未使用老师封装的POSIX线程库, 直接在单文件中调试并注释 问题描述 有三类线程 T1 若干: 死循环打印< T2 若干: 死循环打印> T3 若干: 死循环打印_ 任务: 对线程同步&#xff0c;使得屏幕…

eNSP中小型园区网络拓扑搭建(下)

→b站直通车&#xff0c;感谢大佬← →eNSP中小型园区网络拓扑搭建&#xff08;上&#xff09;← 不带配置命令的拓扑图已上传~ 配置ospf SW5 # ospf 1 router-id 5.5.5.5area 0.0.0.0network 192.168.51.5 0.0.0.0network 192.168.52.5 0.0.0.0area 0.0.0.10network 192.1…

MATLAB函数fir1的C语言移值

要移值的matlab函数&#xff1a; h3 fir1(16,[0.25 0.50]); C语言版本 #include <iostream> #include <cmath>#define PI acos(-1)double sincEasy(double *x, int len, int index) {double temp PI * x[index];if (temp 0) {return 1.0; // sinc(0) 1}ret…

如何在 Linux / Ubuntu 上下载和安装 JMeter?

Apache JMeter 是一个开源的负载测试工具&#xff0c;可以用于测试静态和动态资源&#xff0c;确定服务器的性能和稳定性。在本文中&#xff0c;我们将讨论如何下载和安装 JMeter。 安装 Java&#xff08;已安装 Java 的此步骤可跳过&#xff09; 安装 Java 要下载 Java&…

01、什么是ip、协议、端口号知道吗?计算机网络通信的组成是什么?

声明&#xff1a;本教程不收取任何费用&#xff0c;欢迎转载&#xff0c;尊重作者劳动成果&#xff0c;不得用于商业用途&#xff0c;侵权必究&#xff01;&#xff01;&#xff01; 目录 前言 计算机网络 网络ip地址 网络协议 网络端口号 前言 最近有个项目要用到相关文章…

NOR FLASH介绍

参考 http://t.csdnimg.cn/gHcrG 一、NOR FLASH简介 XIP技术:https://blog.csdn.net/ffdia/article/details/87437872?fromshareblogdetail NOR Flash 和 NAND Flash 的特点和应用举例&#xff1a; NOR Flash&#xff1a; 特点&#xff1a; 支持随机访问&#xff0c;可以直接…

【ROS2】节点

文章目录 ROS2 节点示例&#xff1a;创建并运行成功一个节点1. 创建功能包2. 编写源文件、CMakeLists.txt、package.xml3. 编译功能包4. 设置环境变量5. 运行节点6. 查看节点 参考链接 ROS2 节点 机器人的每一项功能&#xff0c;都被称为是一个节点。 每个节点都是一个独立的…

@PostConstruct

PostConstruct initializeBean方法–> PostProcessor.postProcessBeforeInitialization–> InitDestroyAnnotationBeanPostProcessor.postProcessBeforeDestruction 被PostConstruct注解的方法会在Bean初始化的时候被调用&#xff0c;如下图&#xff1a; 继承关系如下…

json-server 模拟接口服务

前端开发经常需要模拟接口请求&#xff0c;可以通过 json-server 实现。 1. 安装 json-server 在前端项目的终端命令行中执行 npm i json-server2. 创建数据源 在项目中新建文件 db.json &#xff0c;与 package.json 同级&#xff0c;内容为模拟的数据 注意 json 文件对格式…