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 的值
	}
}



文章目录

  • Java 运算符和表达式
  • 一、算术运算符及表达式
  • 二、关系运算符及表达式
  • 三、逻辑运算符及表达式
  • 1、&&( 逻辑与 )
  • 2、|| (逻辑或)
  • 3、!(逻辑非)
  • 四、位运算符及表达式
  • 1、移位运算
  • (1)位右移运算( >> )
  • (2)位右移运算( << )
  • (3)不带符号右移运算( >>> )
  • 2、按位运算
  • (1)& (按位与)
  • (2)| (按位或)
  • (3)^ (按位异或)
  • (4)~ (按位取反)
  • 五、赋值运算符及表达式
  • 六、三元运算符及表达式
  • 七、表达式的运算规则
  • 1、Java 运算符的运算规则
  • 2、类型转换



一、算术运算符及表达式

算术运算符:

符号

作用

说明

+


加法

-


减法

*


乘法

/


除法

%

取模

取模(取余)就是取余数

++

自增

(两个加号)自身加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 类型,然后参与运算。

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