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

您所在的位置:网站首页 java中的运算符有哪几类组成 11、关系运算符、逻辑运算符(讲解&& 和 & 的区别)、赋值表达式、三目表达式、运算符优先级(超详细版本)+结合性的分析

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

2024-07-16 03:34| 来源: 网络整理| 查看: 265

这里写目录标题 一、关系运算符(比较运算符)二、⭐逻辑运算符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 \取反!!条件如果条件本身成立,结果转变成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 打个赏哦,佛系博主一个。 今天吃钵钵鸡啦哈哈哈哈哈哒!!!干饭去。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3