Java 运算符和表达式

简介: Java 运算符和表达式

Java 运算符和表达式

运算符就是对字面量(常量)或变量进行操作的符号,例:+(加号)、-(减号)、*(乘号)、/(除号)等;

==运算符又分为算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、三元运算符等;==

表达式就是用运算符把字面量(常量)或变量连接起来的符合 Java 语法的式子,例:int c = a + b ,其中 a + b 就是一个表达式;

使用不同的运算符连接起来的表达式体现的是不同类型的表达式。例:

public class demo{
   
    public static void main(String[] args)
    {
   
        int a = 10;  //定义一个整型变量 a ,赋值为10
        int b = 15;  //定义一个整型变量 b ,赋值为15
        int c = a + b; //定义一个整型变量 c ,赋值为 a + b
        //在 int c = a + b 中 + (加号)是算术运算符,所以 a + b 就是算术表达式
        System.out.println(c);  //输出变量 c 的值
    }
}

一、算术运算符及表达式

算术运算符:

符号 作用 说明
+ 加法
- 减法
* 乘法
/ 除法
% 取模 取模(取余)就是取余数
++ 自增 (两个加号)自身加1
- - 自减 (两个减号)自身减1

加、减、乘、除四则运算我们从小学就开始接触,用法我们都已经很熟悉了,就不过多的阐述了。

% 取模(取余)就是取余数,例:int x = 7 % 3 ( x = 1) ,类似于 7 / 3 = 2 ······1(余数),取模就是只取余数

++、- - 是一元运算符,参与运算的是单变量,其功能是自身加 1 或自身减 1。而它们又可以分为前置运算和后置运算(就是符号放在前面和符号放在后面),如 ++i,i++,- -i,i- -;

自增自减运算符,前置时要先自加或自减再代入表达式,后置时要先代入表达式再进行自加或自减。

例 1:当自增自减运算符前置时

public class Demo1{
   
    public static void main(String[] args){
   
        //当自增自减运算符前置时,先自增自减,再参与运算
        int a = 4;
        int i = 3;
        int j = 3;
        int x = ++i * a;  // 4 * 4  (++i 时,i 先自加 1( 2 + 1 = 3 ),再代入表达式运算)
        int y = --j * a;  // 2 * 4  (--i 时,i 先自减 1( 2 - 1 = 1 ),再代入表达式运算)
        System.out.println("x = " + x + ",y = "+ y);  //输出结果为 x = 16,y = 8
    }
}

例 2:当自增自减运算符后置时

public class Demo2{
   
    public static void main(String[] args){
   
        //当自增自减运算符后置时,先参与运算,再自增自减
        int a = 4;
        int i = 3;
        int j = 3;
        int x = a * i++;  // 4 * 3  ( i++ 时,i 先代入表达式运算,再自加 1( 2 + 1 = 3 ))
        int y = a * j--;  // 4 * 3  ( i-- 时,i 先代入表达式运算,再自减 1( 2 + 1 = 3 ))
        System.out.println("x = "+ x + ",y = " + y);  //输出结果为 x = 12,y = 12
    }
}

二、关系运算符及表达式

注:程序中的等于符号使用两个等号表示(==),而一个符号(=)在程序是赋值符号

关系运算符用于两个值的比较运算

关系运算符:

符号 说明
> 大于
< 小于
>= 大于等于
<= 小于等于
== 等于
!= 不等于

关系运算符组成关系表达式产生一个布尔值,若关系表达式成立,则生成一个 true 值;不成立则生成一个 false 值。

例:当 x = 10,y = 20 则表达式
x < y 的值为 true ;x > y 的值为 false


三、逻辑运算符及表达式

1、&&( 逻辑与 )

&& 用于两个布尔逻辑或关系表达式的与运算;
&& (与)运算的一般形式是:A && B
当 A 、B 是布尔逻辑或关系表达式时,若 A 和 B 都为 true ,则 A && B 的值为 true,否则只要其中一个为 false ,则 A && B 的值为 false
==与运算时,同真为真,有假则假==

例:当 x = 10,y = 20,z = 30 ,则表达式
( x < y )&& ( y < z ) 的值为 true(因为表达式 x < y 成立,值为真;y < z 成立,值为真;同时为真则为真)
( x > y )&& ( y < z ) 的值为 true(因为表达式 x > y 不成立,值为假;y < z 成立,值为真,有假则假)

2、|| (逻辑或)

|| 用于布尔逻辑或关系表达式的或运算
|| (或)运算的一般形式是:A || B
当 A 、B 是布尔逻辑或关系表达式时,若 A 和 B 中只要其中有一个值为 true ,则 A || B 的值为 true;而要 A || B 的值为 false ,则必须同时都为 false 才行
==或运算时,有真则真,同假为假==

例:当 x = 10,y = 20,z = 30 ,则表达式
( x < y )|| ( y < z ) 的值为 true(因为表达式 x < y 成立,值为真;y < z 成立,值为真;只要有一个为真则为真)
( x > y )|| ( y < z ) 的值为 true(因为表达式 x > y 不成立,值为假;y < z 成立,值为真;只要有一个为真则为真)
( x > y )|| ( y > z ) 的值为 false(因为表达式 x > y 不成立,值为假;y > z 不成立,值为假;都为假才为假)

3、!(逻辑非)

!用于单个逻辑或关系表达式的运算,作用是操作数取反
!(非)运算的一般形式是: !A
其中 A 是布尔关系或逻辑表达式,若 A 的值为 true,则 !A 的值为 false;若 A 的值为 false ,则 !A 的值为 true
==非运算,真变假,假变真==

例:若 x = 20,y = 30,则表达式
!( x > y ) 的值为 true(因为 x > y 不成立,值为假;而经过非运算后值为真)
!( x < y ) 的值为 false(因为 x < y 成立,值为真;而经过非运算后值为假)


四、位运算符及表达式

1、移位运算

(1)位右移运算( >> )

位右移符号 >> 用于整数的二进制位右移运算,在移位操作的过程中,符号位不变,其他位右移
例:将整数 A 进行右移 2 位的操作:A >> 2

(2)位右移运算( << )

位左移符号 << 用于整数的二进制位左移运算,在移位操作的过程中,左边的位移除(舍弃),右边的位补 0
例:将整数 A 进行左移 2 位的操作:A << 2

(3)不带符号右移运算( >>> )

不带符号右移符号 >>> 用于整数二进制位右移运算,在移位操作过程中,右边移除(舍弃),左边的位补 0
例:将整数 A 进行不带符号右移 2 位运算:A >>> 2

2、按位运算

(1)& (按位与)

& 运算符用于两个整数的二进制按位与运算;在按位与操作过程中,如果对应的位都为 1 ,则该位的运算结果为 1,否则为 0
例:A = 10,B = 11,将整数 A 和 B 进行按位与操作 A & B,则 A & B 的结果为 10

A = 10,10 转换成二进制是 1010
B = 11,11 转换成二进制是 1011
1010~(2)~ (A)
1011~(2)~ (B)
1010~(2)~ (A & B)转换为十进制就是 10 ,按位与就是把它们的二进制对应的位进行与运算

(2)| (按位或)

| 运算符用于两个整数的二进制按位或运算;在按位或操作过程中,对应的位中只要有一个为 1 ,则该位的运算结果为 1;对应的位要同时为 0 该位的运算结果才为 0
例:A = 10,B = 11,将整数 A 和 B 进行按位或操作 A | B,则 A | B 的结果为 11

A = 10,10 转换成二进制是 1010
B = 11,11 转换成二进制是 1011
1010~(2)~ (A)
1011~(2)~ (B)
1011~(2)~(A | B)转换成十进制就是 11,按位或就是把它们的二进制对应的位进行或运算

(3)^ (按位异或)

^ 运算符用于两个整数的二进制按位异或运算,在按位异或操作过程中,如果对应位的值相异(一个为 0,一个为 1),则该位的运算结果位 1,否则,为 0
例:A = 10,B = 11,将整数 A 和 B 进行按位异或操作 A ^ B,则 A ^ B 的结果为 1

A = 10,10 转换成二进制是 1010
B = 11,11 转换成二进制是 1011
1010~(2)~ (A)
1011~(2)~ (B)
0001~(2)~ (A ^ B) 转换成十进制就是 1 ,按位异或就是把它们的二进制对应的位进行异或运算,不同为 1

(4)~ (按位取反)

~ 运算符,用于单个整数的二进制位按位取反操作(及将二进制位的 0 变 1,1 变 0 )
例:A = 10,将 A 进行按位取反操作:~A,而 ~A 的值为 3

A = 10,10 转换成二进制是 1010
1010~(2)~(A)
0101~(2)~ (~A) 转换为十进制就是 3,按位取反就是把它们的二进制对应的位取反,0 变 1,1 变 0


五、赋值运算符及表达式

注:在表格里面 |= 符号打不出来,所以我用 或= 表示

赋值运算符:

符号 说明
= 最常用的赋值符号
+= A += B 类似于 A = A + B (运算时自身也要参与运算,将 A + B 的值赋予 A)
-= A -= B 类似于 A = A - B (将 A - B 的值赋予 A)
*= A = B 类似于 A = A B (将 A * B 的值赋予 A)
/= A /= B 类似于 A = A / B (将 A / B 的值赋予 A)
%= 下面这些运算符用法都类似上面的
&= ……
^= ……
或= ……
<<= ……
>>= ……
>>>= ……

六、三元运算符及表达式

三元运算符( ? : )也称条件运算符,由三元运算符组成的的条件表达式格式如下:

逻辑(关系)表达式 ? 表达式 1 :表达式 2

如果逻辑(关系)表达式的值为 true,则取表达式 1 的值;如果逻辑(关系)表达式的值为 false,则取表达式 2 的值
例:定义整型变量 a 和 b,并将它们赋值 a = 10,b = 20,求 a、b 中的最大值,并将最大值赋予变量 max。

public class Demo{
   
    public static void main(String[] args){
   
        int a = 10;
        int b = 20;
        int max = a > b ? a : b  //表达式 a > b 成立,则取 a(表达式 1)的值,不成立则取 b(表达式 2)的值
        System.out.println("最大值为" + max); //输出最大值为20,由于表达式不成立,所以最大值取表达式 2 的值,就是 b 的值
    }
}

七、表达式的运算规则

1、Java 运算符的运算规则

注:在表格里面符号 | ,符号 || 打不出来,所以用 或 表示符号(|) 用 或或 表示符号(||)

Java 运算符的优先级:

…… …… ……
1 . 、[] 、()
2 new,(数据类型)
3 * 、/、 % 算术运算符
4 +、- ……
5 >>、>>>、<< 位运算符
6 >、<、>=、<=、instanceof 关系运算符
7 ==、!= ……
8 & 位运算符
9 ^ ……
10 ……
11 && 逻辑运算符
12 或或 ……
13 ?: 三元运算符
14 =、+=、-=、*=、/=、%=、^= 拓展赋值运算符
15 &=、或=、<<=、>>=、>>>= ……

2、类型转换

整型、实型、字符型数据可以混合运算。一般情况下,系统会默认将两个不同级别的中低级的运算数,转换为一致的更高级别的数据类型的运算数,然后再进行运算。

数据类型从高级到低级顺序如下:
==double > float > long > int > short > byte==
==int > char== 字符类型在和其他数据类型运算时会先根据 ASCII 码转换成 int 类型,然后参与运算。

要将高类型的数据类型转换成低类型的数据类型时,需要进行强制转化,而在转换过程中会造成数据溢出或者数据精度下降。


如果文章对各位小伙伴有帮助的话欢迎三连!!!

另外,文章如有错误之处,也欢迎各位大佬批评指正!!!

相关文章
|
17天前
|
Java API 开发者
Java中的Lambda表达式与Stream API的协同作用
在本文中,我们将探讨Java 8引入的Lambda表达式和Stream API如何改变我们处理集合和数组的方式。Lambda表达式提供了一种简洁的方法来表达代码块,而Stream API则允许我们对数据流进行高级操作,如过滤、映射和归约。通过结合使用这两种技术,我们可以以声明式的方式编写更简洁、更易于理解和维护的代码。本文将介绍Lambda表达式和Stream API的基本概念,并通过示例展示它们在实际项目中的应用。
|
19天前
|
Java API 开发者
Java中的Lambda表达式:简洁代码的利器####
本文探讨了Java中Lambda表达式的概念、用途及其在简化代码和提高开发效率方面的显著作用。通过具体实例,展示了Lambda表达式如何在Java 8及更高版本中替代传统的匿名内部类,使代码更加简洁易读。文章还简要介绍了Lambda表达式的语法和常见用法,帮助开发者更好地理解和应用这一强大的工具。 ####
|
21天前
|
并行计算 Java 编译器
深入理解Java中的Lambda表达式
在Java 8中引入的Lambda表达式,不仅简化了代码编写,还提升了代码可读性。本文将带你探索Lambda表达式背后的逻辑与原理,通过实例展示如何高效利用这一特性优化你的程序。
|
25天前
|
搜索推荐 Java API
探索Java中的Lambda表达式
本文将深入探讨Java 8引入的Lambda表达式,这一特性极大地简化了代码编写,提高了程序的可读性。通过实例分析,我们将了解Lambda表达式的基本概念、使用场景以及如何优雅地重构传统代码。文章不仅适合初学者,也能帮助有经验的开发者加深对Lambda表达式的理解。
|
1月前
|
Java
探索Java中的Lambda表达式
【10月更文挑战第37天】本文将带你深入理解Java的Lambda表达式,从基础语法到高级特性,通过实例讲解其在函数式编程中的应用。我们还将探讨Lambda表达式如何简化代码、提高开发效率,并讨论其在实际项目中的应用。
|
1月前
|
Java API
Java中的Lambda表达式与函数式编程####
【10月更文挑战第29天】 本文将深入探讨Java中Lambda表达式的实现及其在函数式编程中的应用。通过对比传统方法,我们将揭示Lambda如何简化代码、提高可读性和维护性。文章还将展示一些实际案例,帮助读者更好地理解和应用Lambda表达式。 ####
|
1月前
|
JSON 自然语言处理 Java
这款轻量级 Java 表达式引擎,真不错!
AviatorScript 是一个高性能、轻量级的脚本语言,基于 JVM(包括 Android 平台)。它支持数字、字符串、正则表达式、布尔值等基本类型,以及所有 Java 运算符。主要特性包括函数式编程、大整数和高精度运算、完整的脚本语法、丰富的内置函数和自定义函数支持。适用于规则判断、公式计算、动态脚本控制等场景。
|
16天前
|
安全 Java API
Java中的Lambda表达式:简化代码的现代魔法
在Java 8的发布中,Lambda表达式的引入无疑是一场编程范式的革命。它不仅让代码变得更加简洁,还使得函数式编程在Java中成为可能。本文将深入探讨Lambda表达式如何改变我们编写和维护Java代码的方式,以及它是如何提升我们编码效率的。
|
18天前
|
安全 Java API
Java中的Lambda表达式与Stream API的高效结合####
探索Java编程中Lambda表达式与Stream API如何携手并进,提升数据处理效率,实现代码简洁性与功能性的双重飞跃。 ####
24 0
|
26天前
|
Java 开发者
探索Java中的Lambda表达式
【10月更文挑战第43天】本文将深入浅出地介绍Java中的Lambda表达式,通过实际代码示例,带领读者理解其背后的原理及应用场景。Lambda表达式不仅简化了代码,还提高了开发效率,是Java开发者必备的技能之一。