Java学习(三)Java运算符

系列文章目录

Java学习(一)
Java学习(二)数据类型及类型转换



前言

本文介绍Java运算符的相关知识。


一、运算符是什么?

运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。
常用的运算符有:

  1. 算数运算符
  2. 赋值运算符
  3. 关系运算符 [比较运算符]
  4. 逻辑运算符
  5. 位运算符 [需要二进制基础]
  6. 三元运算符

二、运算符

1.算数运算符

算数运算符是对数值类型的变量进行运算的,在 Java 程序中使用的非常多。
算数运算符

示例

	//1.除号的使用细节  ”/“
	System.out.println(10 / 4); // 从数学上来看是2.5,在 Java 中输出位为2 
	System.out.println(10.0 / 4); // 在 Java 中输出位为2.5,选择范围更高的
	double d = 10 / 4; // 在 Java 中输出位为2.0
	
	//2. 取模(取余)”%“ 的本质是一个公式  a % b =  a - a / b * b  !!!!
	System.out.println(10 / 3);  // 1
	System.out.println(-10 / 3);  // -1
	System.out.println(10 / -3);  // 1

	//3. ++的使用
	int i = 10;
	i++; // 自增 等价于 i = i + 1 // 11
	++i;// 自增 等价于 i = i + 1 // 12
	//如果作为独立语句使用两者是完全一样的
	System.out.println("i=" + i);  // 12 
	/*
	作为表达式使用
	前++ : ++i 先自增后赋值
	后++ : i++ 先赋值后自增
	*/
	int j = 8;
	int k = ++j; // 等价于 j = j + 1; k = j;
	System.out.println("k=" + k + "j=" + j); //9,9
	
	int j = 8;
	int k = j++; // 等价于 k = j; j = j + 1; 
	System.out.println("k=" + k + "j=" + j); //8,9
	

练习

	int i = 1;
	i = i++;
	System.out.println(i);

输出结果为 1。第二句的细节是:(1)temp = i;(2)i = i + 1;(3)i = temp;

	int i = 1;
	i = ++i;
	System.out.println(i);

输出结果为 2。第二句的细节是:(1)i = i + 1;(2)temp = i;(3)i = temp;

2.关系运算符(比较运算符)

关系运算符的结果都是 boolean 型,也就是要么是 true, 要么是 false。关系表达式经常用在 if 结果的条件语句中或循环结构的条件中。

关系运算符

3.逻辑运算符

逻辑运算符:用于连接多个条件(多个关系表达式),最终的结果也是一个 boolean 值。

  1. 短路与 &&,短路或 ||,取反 !
  2. 逻辑与 &,逻辑或 |,逻辑异或 ^ 逻辑运算符
  • && 短路与和 & 逻辑与的基本规则是一样的,两个条件都为 true,结果为 true,否则 false。两者的区别在于:&& 短路与,如果第一个条件为 false, 则第二个条件不会判断,最终结果为 false,效率高;&逻辑与,不管第一个条件是否为 false,第二个条件都要判断,效率低;开发中,我们使用的基本是短路与&&。
  • || 短路或和 | 逻辑或的基本规则是一样的,两个条件只要有一个 true,那么结果就为 true,否则 false。两者的区别在于:|| 短路或,如果第一个条件为 true, 则第二个条件不会判断,最终结果为 true,效率高; | 逻辑,不管第一个条件是否为 true,第二个条件都要判断,效率低;开发中,我们使用的基本是短路与 || 短路或。

4.赋值运算符

赋值运算符:赋值运算符就是将某个运算后的值,赋给指定的变量。运算顺序从右到左。

  • 基本赋值运算符 =
  • 复合赋值运算符 +=、-=、*=、/=、%=等。a += b 等价于 a = a + b
	//复合赋值运算符会进行类型的转换
	byte b = 3;
	b += 2; //等价于 b = (byte)(b + 2);,直接 b = b + 2; 报错
	b++; //等价于 b = (byte)(b + 1); 底层也有自动转换

5.三元运算符

基本语法:
条件表达式 ?表达式1:表达式2;
运算规则:
如果条件表达式为 true,运算后的结果是表达式1;
如果条件表达式为 false,运算后的结果是表达式2;

6.位运算符

java 中有 7 个位运算(按位与 &、按位或 |、按位异或 ^、按位取反 ~、按位取反 ~、>>、<< 和 >>>)
计算机运行时,都是以补码的方式

  • 按位与 &:两位全为1,结果为1,否则为0
  • 按位或 |:两位有一个为1,结果为1,否则为0
  • 按位异或 ^:两位一个为0,一个为1,结果为1,否则为0
  • 按位取反 ~:0变成1,1变成0
  • 算术右移 >>:低位溢出,符号位不变,并用符号位补溢出的高位
  • 算术左移 <<:符号位不变,低位补0
  • 逻辑右移也叫无符号右移 “>>>” :低位溢出,高位补0
	System.out.println(2&3); //推导过程:1.先得到2和3的补码;2.按位&运算 3. 得到答案的补码,转换成原码
	System.out.println(~-2); //先得到-2的补码,然后进行取反,转换成原码

三、运算符优先级

  1. 运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。如下表,上一行运算符总优先于下一行。
  2. 只有单目运算符、赋值运算符是从右向左运算。
  3. (),{}等 > 单目运算符 > 算术运算符 > 位移运算符 > 比较运算符 > 逻辑运算符 > 逻辑运算符 > 三元运算符 > 赋值运算符
    运算符优先级
  • 24
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值