Java中的算数、关系、逻辑、条件、赋值 五大运算符详解

简介: 本文介绍了Java中的运算符及其优先级,包括算数运算符(如+、-、*、/、%、++、--)、关系运算符(如<、>、==、!=)、逻辑运算符(如&&、||、!)、条件运算符(三目运算符)和赋值运算符(如=、+=、-=等)。详细解释了每种运算符的功能与用法,例如自增自减运算符的特点、逻辑运算符的短路法运算以及位运算符的操作规则。最后还提供了运算符优先级表格,帮助开发者理解复杂表达式的计算顺序。文中提醒,在实际开发中,建议使用括号明确运算顺序以提高代码可读性。

1 Java中的运算符

对常量和变量进行操作的符号称为运算符,参与运算的数据称为操作数。共有五种:算数(自增,自减特殊)运算符、关系(比较) 运算符、逻辑运算符、 条件运算符、赋值运算符。

1.1 算数运算符

常见有: +  -   *   /   %   ++   --

1.1.1 / 除

情况 结果
被除数和除数都是整型 如果除数不为0,结果取整;
如果除数为0,结果抛出异常:ArithmeticException
被除数和除数至少有一个是浮点型 除数不为0时,如果被除数不为0,结果:取浮点型精确值;如果被除数为0,结果:0
除数为0时,如果被除数不为0,结果:Infinity或-Infinity;如果被除数为0,结果:NaN

1.1.2 %取余(取模)

 取模运算即可化简为如下运算:

a%b = a - (a/b)*b

情况 结果
被除数和除数都是整型 如果除数不为0,结果取整形余数;
如果除数为0,结果抛出异常: ArithmeticException
被除数和除数至少有一个是浮点型 如果除数不为0或0.0,结果:取浮点型余数;
如果除数为0或0.0,结果:NaN
0或0.0对零以外的任何数求余都将得到0或0.0。

1.1.3 ++  自增运算符

前置:放在变量名称的前边   ++a;特点:先自增一,然后参与其他的运算。

后置:放在变量名称的后边   --a;特点:先参与运算,后自减一。

1.1.4 --  自减运算符

前置:--a     后置:a—    原理同自增运算符

注意:自增、自减只能操作变量。

1.2 关系运算符(比较运算)

常见有:<   >   <=  >=  ==  !=   。关系运算符的运算结果是boolean类型。

java

体验AI代码助手

代码解读

复制代码

Int a=10;int b=20;
Boolean c=(a==b);   //false
Boolean c=(a=b);   //编译错误,因为括号里是个赋值运算,结果为int类型,不能使用boolean类型来接收

1.3 逻辑运算符

逻辑与&&  逻辑或||  逻辑非!

  逻辑运算符一般用于连接boolean类型的表达式或值,但是某些位运算符可用于连接数值。

1.3.1 &&

操作数有两个。并且都是boolean类型。运算后的结果也是boolean类型。

运算的结果:

true && true     true true && false   false false && true   false false && false   false

  总结:操作数当中只要有一个值是false,结果就是false。

  当第一个操作数的结果为false,结果就已经确定,第二个操作数就没有必要参与运算,这就是逻辑与的短路法运算

1.3.2 ||

操作数有两个,且都是boolean类型,运算后的结果boolean型。

运算结果:

true || true     true true || false   true false || true   true false || false   false

  总结:逻辑或当中只要有一个操作数是true结果就是true。

  当第一个操作数的结果是true是,结果就已经确定,第二个操作数就没有必要参与运算了,逻辑或亦采用短路法运算

1.3.3 !

非真即为假,非假即为真。 !true = false

!false=true

1.3.4 位运算符

&  |  ^  ~  <<  >>  >>>

  参与位运算的数字都是二进制补码的方式进行运算的,因此需要了解源码,反码,补码。

位运算符
运算符 运算 范例
<< 左移 3 << 2 = 12 --> 3*2*2=12
>> 右移 3 >> 1 = 1 --> 3/2=1
>>> 无符号右移 3 >>> 1 = 1 --> 3/2=1
& 与运算 6 & 3 = 2
| 或运算 6 | 3 = 7
^ 异或运算 6 ^ 3 = 5
~ 反码(取反) ~6 = -7

1.3.4.1 & 按位与

操作数有两个,操作数的类型可以是布尔类型,可以是数值类型。

  当操作数是布尔类型的时候:运算的结果和逻辑与完全相同,但是不采用短路法运算

arduino

体验AI代码助手

代码解读

复制代码

true1)& true1true1true1)& false0false0false0)& true1false0false0)& false0false0

  操作数是数值:先转换为二进制,有0则0

rust

体验AI代码助手

代码解读

复制代码

6
 &5
  ----- //转换为二进制,对位有0则0,无0则1
110
&101
100 -> 4

1.3.4.2 | 按位或

操作数有两个,操作数的类型可以是布尔类型,可以是数值类型。

  当操作数是布尔类型的时候:运算的结果和逻辑或完全相同,但是不采用短路法运算

arduino

体验AI代码助手

代码解读

复制代码

true | true true
true | false true
false | true true
false | false false

  操作数是数值时:先转换为二进制,有1则1

rust

体验AI代码助手

代码解读

复制代码

6
 |5
  ----- //转换为二进制,对位有1则1,无1则0
110
 |101
111 ->7

1.3.4.3 ^ 按位异或

对应位相同,取0;对应位不同,取1。操作数有两个可以是布尔类型也可以是数值型。

  当操作数是布尔类型的时候::对位相同取false,不同取true

arduino

体验AI代码助手

代码解读

复制代码

true ^ true false
true ^ false true
false ^ true true
false ^ false false

  当操作数是数值的时候::对位相同取false,不同取true

arduino

体验AI代码助手

代码解读

复制代码

  6
 ^5
----- //转换为二进制,对位相同则0,不同则1
110—>6
^101—>5
----- //
011—>3
^101—>5
----- //
110—>6

补充^运算特点:一个数据对另一个数据按位异或两次,该数本身不变,不受位置影响。输出结果为该数的原值。

1.4 条件运算符(三目运算符)

语法:数据类型 xx=表达式?value1:value2; 解释:表达式的运算结果是一个boolean类型。   当返回的值是一个ture,取value1   当返回的值是一个false,取value2

  三目运算符支持嵌套,但是不能直接在语法中输出。因为它是一个运算符,它最终返回一个结果,应该去接收它的结果。

1.5 赋值运算符

=  +=  -=  /=  %=  <<=  >>=  >>>=  ^=

int a=32;a+=2;   结果等价于: a=a+2;   但是内部规则是不一样,内部进行了强制转型,案例如下:

java

体验AI代码助手

代码解读

复制代码

        byte i = 10;
        i += 1000;   //内部强转,编译通过
        i = 1100;  //超出长度,编译报错

2 运算符的优先级

算数(自增,自减特殊) > 关系(比较) > 逻辑 > 条件 > 赋值

优先级 运算符 描述 结合性
1 () [] 括号 从左到右
2 + - 正,负 从右向左
2 ! ~ ++ -- 非,取反,自增自减 从右向左
3 * / % 乘除,取余(模) 从左向右
4 + - 加,减 从左向右
5 << >> >>> 左右移,无符号右移 从左向右
6 < <= > >= instanceof 大小关系,判断类型 从左向右
7 == != 相等关系 从左向右
8 & 按位与 从左向右
9 ^ 按位异或 从左向右
10 | 按位或 从左向右
11 && 逻辑与 从左向右
12 || 逻辑或 从左向右
13 ?: 条件(三目)运算符 从右向左
14 = += -= *= /= %= &= |= ^= ~= <<= >>= >>>= 赋值,位赋值运算 从右向左

说明:

  1. 该表中优先级按照从高到低的顺序书写,也就是优先级为1的优先级最高,优先级14的优先级最低。
  2. 结合性是指运算符结合的顺序,通常都是从左到右。从右向左的运算符最典型的就是负号,例如3+-4,则意义为3加-4,符号首先和运算符右侧的内容结合。
  3. instanceof作用是判断对象是否为某个类或接口类型,后续有详细介绍。
  4. 注意区分正负号和加减号,以及按位与和逻辑与的区别
  5. 其实在实际的开发中,不需要去记忆运算符的优先级别,也不要刻意的使用运算符的优先级别,对于不清楚优先级的地方使用小括号去进行替代。


转载来源:https://juejin.cn/post/6984671011044065288

相关文章
|
4月前
|
Java Go 开发工具
【Java】(4)五种运算符的说明(&&、||、>=、>、<=、<)、4种控制语句(if、for、while、dowhile)、输入和输出说明
扩展类的赋值运算符不改变运算结果类型,假设最初这个变量的的类型byte类型,无论怎么进行加或追减,最终该变量的数据类型还是byte类型。注:一个表达式中有多个运算符,运算符有优先级,不确定的加小括号,优先级得到提升。当布尔表达式的结果是false的时候,选择表达式2作为整个表达式的执行结果。当布尔表达式的结果是true的时候,选择表达式1作为整个表达式的执行结果。当用户输入的时候,并且最终敲回车键的时候,键入的信息会自动赋值给a。并且,连接运算之后的结果还是一个字符串类型。表达式1 : 表达式2。
186 1
|
11月前
|
存储 Java
# 【Java全栈学习笔记-U1-day02】变量+数据类型+运算符
本篇笔记主要围绕Java全栈学习的第二天内容展开,涵盖了变量、数据类型、运算符以及Scanner类的应用。首先介绍了变量的概念与命名规范,以及如何定义和使用变量;接着详细讲解了Java中的基本数据类型,包括整型、浮点型、字符型、布尔型等,并通过实例演示了数据类型的运用。随后,深入探讨了各类运算符(赋值、算术、关系、逻辑)及其优先级,帮助理解表达式的构成。最后,介绍了如何利用Scanner类实现用户输入功能,并通过多个综合示例(如计算圆面积、购物打折、变量交换及银行利息计算)巩固所学知识。完成相关作业将进一步加深对这些基础概念的理解与实践能力。
212 13
|
6月前
|
存储 缓存 算法
Java数据类型与运算符深度解析
本文深入解析Java中容易混淆的基础知识,包括八大基本数据类型(如int、Integer)、自动装箱与拆箱机制,以及运算符(如&与&&)的使用区别。通过代码示例剖析内存布局、取值范围及常见陷阱,帮助开发者写出更高效、健壮的代码,并附有面试高频问题解析,夯实基础。
|
Java
Java运算符
Java运算符
124 12
|
8月前
|
人工智能 Java
Java运算符中的隐式转换
本文介绍了 Java 运算符中的隐式类型转换规则,涵盖算数、逻辑、位、关系、赋值及其他运算符。重点分析了算数和位运算符在处理小于 int 位长的数据时会自动转换为 int 类型的特性,并通过代码示例说明可能引发的类型不匹配错误。逻辑、关系、赋值及其他运算符则不涉及类型转换。总结指出,部分运算符在计算时会将小位长数据隐式转为 int 类型,结果也为 int。
|
11月前
|
Java
课时15:Java运算符(基础数学运算符)
课时15介绍了Java中的基础数学运算符,涵盖加、减、乘、除及自增自减运算。强调了运算符的优先级和使用括号的重要性,并通过范例展示了四则运算与自增自减的具体应用。提醒编写代码时应保持简洁,避免复杂的表达式,确保代码易读性和可维护性。
166 7
|
11月前
|
SQL IDE 算法
《从头开始学java,一天一个知识点》之:运算符与表达式:算术、比较和逻辑运算
**你是否也经历过这些崩溃瞬间?** - 看了三天教程,连`i++`和`++i`的区别都说不清 - 面试时被追问&quot;`a==b`和`equals()`的区别&quot;,大脑突然空白 - 写出的代码总是莫名报NPE,却不知道问题出在哪个运算符 这个系列为你打造Java「速效救心丸」,每天1分钟,地铁通勤、午休间隙即可完成学习。直击高频考点和实际开发中的「坑位」,拒绝冗长概念,每篇都有可运行的代码示例。明日预告:《控制流程:if-else条件语句实战》。
259 6
|
11月前
|
Java
课时17:Java运算符(关系运算符)
范例:进行关系判断。如果要进行关系运算的操作可使用:>、<、>=、<=、!=(不等于)、==。所有的关系运算符判断完成的数据返回结果都是布尔类型(boolean)。只要使用关系运算符进行逻辑判断,最终的结果就是布尔型,只有true和false两种结果,而且能和if语句结合使用。
212 6
|
11月前
|
Java
课时16:Java运算符(三目运算符)
范例:将两个变量值在大的内容赋值给新变量。三目是一种赋值运算,它指的是根据条件来进行判断。(根据判断的结果来决定赋值内容)对于三目运算的基本使用语法如下: 数据类型 变量 = 布尔表达式 ?条件满足时赋值内容:条件不满足时:赋值内容
216 6
|
11月前
|
Java 程序员 数据处理
课时19:Java运算符(位运算符)
课时19介绍Java中的位运算符,涵盖进制转换、位与、位或及移位操作。重点讲解了二进制与其他进制的转换方法,通过具体范例演示了位与和位或运算的过程,并展示了八进制和十六进制的处理方式。此外,还解释了逻辑运算符(&&、||)与位运算符(&、|)的区别及其应用场景,特别是位运算在加密中的应用。
297 5