JavaSE语法之二:运算符(超全!!!)

本文详细介绍了Java中的运算符,包括算术运算符(加减乘除、模、增量、自增/自减)、关系运算符、逻辑运算符(包括逻辑与、或、非)、位运算符(按位与、或、异或、取反)、移位运算符(左移、右移、无符号右移)以及条件运算符的用法和优先级。
摘要由CSDN通过智能技术生成

一、什么是运算符

计算机的最基本的用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量。

Java中运算符可以分为以下:
在这里插入图片描述

二、算术运算符

1. 基本四则运算符:加减乘除模(+ - * / %)

  • 加减 + -
System.out.println(3 + 2); //5
System.out.println(3 - 2); //1
  • 除法 /
		System.out.println(5 / 2);  //2
		System.out.println((float)5 / 2);  //2.5 ——>对5进行强转 5.0/2=>此时把2提升到了float 2.0————>所以结果是2.5
		System.out.println(5 / (float)2); //2.5 与上述同理
		System.out.println((float)(5/2)); //2.0 先运算5/2=2,把结果2进行了一个强转,结果为2.0
  • 模 %
		System.out.println(10 % 3); //1  10/3=3……1
		System.out.println(10 % -3); //1 10/-3=-3……1
		System.out.println(-10 % 3); //-1 -10/3=-3……-1
		System.out.println(-10 % -3); //-1 -10/-3=3……-1

		System.out.println(11.5 % 2); //1.5

2. 增量运算符(+= -= *= %=)

a += 2;相当于 a = a + 2;

		short sh = 12;
		sh = sh + 2; //编译出错,因为2是int型。对2字节的sh也做了一个提升。4字节+4字节装到2字节的sh中,发生编译错误,此时如果进行强制转换,可能会发生数据丢失。

		sh += 2; //编译成功,可理解为,帮助我们进行了一个类型的转换

3. 自增/自减运算符(++ --)

++ 是给变量的值+1,–是给后置的值-1

  • 如果单独使用,++a 和 a++,没有任何区别
		int a = 10;
		++a;
		System.out.println(a);  //11
		int a = 10;
		a++;
		System.out.println(a);  //11
  • 如果混合使用

    • ++a:先+1,再赋值(先+1,再使用变量+1之后的值)
    • a++:先赋值,再+1(先使用变量原来的值,表达式结束时给变量+1)
 		int a = 10;
        int b = ++a; // a = a+1; b = a;
        System.out.println(a); //11
        System.out.println(b); //11
 		int a = 10;
        int b = a++; // b = a; a = a+1;
        System.out.println(a); //11
        System.out.println(b); //10

同理

		int i = 10;
		i = i++;
		System.out.println(i); //10

此结论需要看Java的汇编,只需要记住这个结论就好了

  • 只有变量才能使用自增/自减运算符,常量不能使用,因为常量不允许被修改

三、关系运算符

  • 关系运算符主要有六个:== != < > <= >=

  • 其计算结果是true或者false

		System.out.println(1 < 5); //true
        System.out.println(1 > 5); //false
        System.out.println(1 == 5); //false
        System.out.println(1 != 5); //true
        System.out.println(1 <= 5); //true
        System.out.println(1 >= 5); //false

四、逻辑运算符(重点!)

  • 逻辑运算符有三个:&& || !
  • 其运算结果都是boolean类型

1. 逻辑与(短路与) &&

语法规则:布尔表达式1 && 布尔表达式2

特点:

  • 表达式1为真,那么执行表达式2,如果表达式2也为真1则整体为真
  • 如果表达式1为假,那么不会执行表达式2(短路与:当表达式2为真也不执行了)
    在这里插入图片描述
		int a = 1;
		System.out.println(1/0); //报了异常,此时是算数异常
		System.out.println(a == 2 && 1/0); //false; 不会报异常是因为短路与的原因,后面没执行 

2. 逻辑或 ||

语法规则:布尔表达式1 || 布尔表达式2

特点:

  • 如果表达式1为真,就不执行表达式2,整体为真,发生短路!
  • 如果表达式1为假,就继续执行表达式2,表达式2为真,整体为真
  • 左右表达式至少有一个为真,则结果为真
    在这里插入图片描述

3. 逻辑非 !

语法规则:!表达式

特点:真变假,假变真。
在这里插入图片描述

int a = 1;
System.out.println(!(a == 1));  //a == 1为true,取个非就是false

4. 短路求值

上述讲过的 && 和 || 的短路情况

  1. 对于对于 &&,如果左侧表达式值为 false,则表达式结果一定是 false,无需计算右侧表达式
  2. 对于 ||,如果左侧表达式值为 true,则表达式结果一定是 true,无需计算右侧表达式
  3. & 和 | 如果表达式结果为 boolean 时,也表示逻辑运算. 它们和 && || 的区别在于,它们不支持短路求值
//此时 &(按位与)运算符,如果左右两边都是布尔类型,那么也相当于逻辑运算
//区别是 不能进行短路求值了
		int a = 1;
		System.out.println(a == 2 & 1/0); //此时会报算数异常

五、位运算符

1. 按位与 &

按比特位与
如果两个二进制位都是 1,则结果为 1,否则结果为 0

在这里插入图片描述

2. 按位或 |

如果两个二进制位都是0,则结果为0,否则结果为1

在这里插入图片描述

3. 按位取反 ~

如果该位为0,则转为1,如果该为为1,则转为0
在这里插入图片描述

4. 按位异或^

相同为0,不同为1
在这里插入图片描述
特点:

  1. 两个相同的数字异或,结果是0
    在这里插入图片描述

  2. 0 异或任何数组,结果都等于其本身
    在这里插入图片描述

六、移位运算符

1. 左移 <<

左移:右边加0,最左侧最不要了,左移相当于乘法

0000 1011 (11)
0000 1011 << 1 —> 0000 0110 (22)相当于11 * 21
0000 1011 << 2 —> 0010 1100 (44)相当于11 * 22

2. 右移 >>

右移:左边加0,右移相当于除法,补符号位(正数补0,负数补1)

0000 1011 >> 1 —> 0000 0101 (5) 11 / 21
0000 1011 >> 2 —> 0000 0010 (2) 11 / 22

右移相当于除法,但是这个结论适用于正数,负数就不适用了(如:-1是特殊的,前后不变)

1111 1111 (-1)
1111 1111 >> 1 —> 1111 1111 (-1)

3. 无符号右移 >>>

统统在左边补0

注意:

  1. 左移 1 位,相当于原数字 * 2,左移 N 位, 相当于原数字 * 2 的N次方
  2. 右移 1 位,相当于原数字 / 2,右移 N 位, 相当于原数字 / 2 的N次方
  3. 由于计算机计算移位效率高于计算乘除,当某个代码正好乘除 2 的N次方的时候可以用移位运算代替
  4. 移动负数位或者移位位数过大都没有意义

七、条件运算符

语法规则:表达式1?表达式2:表达式3

解释:表达式1是Boolean表达式,当1为真,返回2,否则返回3

举个复杂的例子证明你会了:

		boolean flg = (true == true) ? (true == true) ? false : true : true;
		System.out.println(flg);  

答案为:false
解析:
我们知道条件运算符的语法规则是:表达式1?表达式2:表达式3 所以我们找出各个表达式即可。
①先找出大方向的表达式1、2、3
在这里插入图片描述
②其中表达式2中又嵌套着表达式1、2、3;且表达式2最终结果为false
在这里插入图片描述
③得出最终结果 false
在这里插入图片描述

八、运算符的优先级

运算符之间是有优先级的,具体的规则不必记忆,在可能存在歧义的代码中加上括号即可!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值