运算符 (operator)
算术运算符 | 二元运算符 | + , - , * ,/ ,% |
一元运算符 | ++, -- | |
赋值运算符 | = | |
扩展运算符 | += , -= , *= ,/= | |
关系运算符 | > , < , >= , <= , == , != , instanceof (判断某个对象是不是类) | |
逻辑运算符 | &&(与) , || (或) , ! (非) , ^ (异或) | |
位运算符 | & , | , ^ , ~(非) , >> , << , >>> | |
条件运算符 | ?:(唯一需要三个操作数的运算符) | |
字符串连接符 | + |
各种运算符
算术运算符
二元运算符
public class Test{ public static void main(String[] args){ int a = 3; int b = 5; int c = a + b; int d = a - b; int e = a * b; int f = b / a; int g = a % b; // 取模运算 System.out.println("a为" + a); System.out.println("b为" + b); System.out.println("c为" + c); System.out.println("d为" + d); System.out.println("e为" + e); System.out.println("f为" + f); // 整型除法出现小数不存在四舍五入,只有向下取整 System.out.println("g为" + g); } }
二元运算符的一些运算规则
整数运算
~如果两个操作数有一个为long,则结果为long(向上兼容)
~如果没有long时,结果为int,即使操作数全为short,byte, 结果也为int
import java.util.function.DoubleBinaryOperator; public class Test{ public static void main(String[] args){ int a = 3; long b = 4L; // int c = a + b;// 会报错, 不兼容 long c = a + b; System.out.println(c); int d = 10; double e = d / a; // 整数和整数相除只会保留整数部分 System.out.println(e); } }
浮点运算
~如果两个操作数有一个为double,则结果为double
~只有两个操作数全为float时,结果才为float
public class Test{ public static void main(String[] args){ int a1 = 3; double a2 = 3.0; int b1 = 4; double b2 = 4.0; double c1 = a1 / b1; double c2 = a1 / b2; double c3 = a2 / b1; double c4 = a2 / b2; System.out.println("整数除整数 : " + c1); System.out.println("整数除浮点数 : " + c2); System.out.println("浮点数除整数 :" + c3); System.out.println("浮点数除浮点数 :" + c4); } }
取模运算
~其操作数也可以是浮点数,一般使用整数,结果是”余数“,”余数“符号和左边的操作数相同,
如 -7 % 3 = -1,7 % -3 = 1
一元运算符
public class Test{ public static void main(String[] args){ int b = 30; //自增 b ++; System.out.println(b); //自减 b --; System.out.println(b); int a = 40; System.out.println("进行任何操作前是\t" + a); System.out.println("自增\t" + a ++); // 用完才自增 System.out.println("自增后\t" + a); System.out.println("自减\t" + a --); // 用完才自减 System.out.println("自减后\t" + a + "\n\n"); int c = 60; System.out.println("进行任何操作前是\t" + c); System.out.println("自增\t" + ++ c); // 先增再用 System.out.println("自增后\t" + c); System.out.println("自减\t" + -- c); // 先减再用 System.out.println("自减后\t" + c); } }
赋值运算符
比较简单我甚至都不想写 比如 t = 3 就是将 3 这个值赋予 t 这个变量
扩展运算符
运算符 | 用法举例 | 等效的表达式 |
+= | a += b | a = a + b |
-= | a -= b | a = a - b |
*= | a *= b | a = a * b |
/= | a /= b | a = a / b |
%= | a %= b | a = a % b |
关系运算符
关系运算符是用来进行比较运算的。关系运算的结果是布尔值: true / false
运算符 | 含义 | 运用示例 |
== | 等于 | a == b |
!= | 不等于 | a != b |
> | 大于 | a > b |
< | 小于 | a < b |
>= | 大等于 | a >= b |
<= | 小等于 | a <= b |
注意事项
1. = 是赋值运算符,真正的判断两个操作数是否相等的运算符是 ==
2. ==、 != 是所有(基本和引用)数据类型都可以使用的
3. >、>= 、< 、<= 、仅针对数值类型(byte/short/int/long, double/float, char)
逻辑运算符
运算符 | 说明 | |
与 | & | 只要有一个为false,则为false |
短路与 | && | |
或 | | | 只要有一个为true,则为true |
短路或 | || | |
非 | ! | 取反 |
异或 | ^ | 相同为false, 相异为true |
短路与和短路或采用短路的方式。从左到右计算,如果只通过运算符的左边的操作数就能确定该逻辑表达式的真值,
则不会继续计算运算符右边的操作数,提高效率。
public class Test{ public static void main(String[] args){ boolean a = true; boolean b = false; System.out.println("与运算示例\t" + (a & b)); System.out.println("或运算示例\t" + (a | b)); System.out.println("非运算示例\t" + !a); System.out.println("异或运算示例\t" + (a ^ b)); // 短路与、短路或 // int b3 = 3/0; //会报错,不能除以0 boolean c = (1 > 2) && (4 < 3 / 0); //不会报错, 一假即假 // Boolean d = (1 > 2) & (4 < 3 / 0); //会报错 System.out.println("\n短路与\t" + c); // System.out.println(d); boolean e = (2 > 1) || (3/0 == 0); //不会报错,一真即真 // boolean f = (2 > 1) | (3/0 == 0); //会报错 System.out.println("\n短路或\t" + e); } }
位运算符
位运算符 | 说明 |
~ | 取反 |
& | 按位与 |
| | 按位或 |
^ | 按位异或 |
<< | 左移运算符,左移n位相当于乘2n |
>> | 右移运算符,右移n位相当于除2n取商 |
public class Test{ public static void main(String[] args){ int a = 7; // 0111 int b = 8; // 1000 System.out.println("按位与\t" + (a & b)); // 0000 System.out.println("按位或\t"+ (a | b)); // 1111 System.out.println("按位取反\t" + ~ b); // 0 1000 取反 是对其补码 0 1000 全部取反 1 0111 末尾减一得反码 1 0110 算原码 1 1001 即 -9 System.out.println("按位异或\t" + (a ^ b)); // 1111 相同为0,相异为1 System.out.println("左移\t" + (b << 1)); // 相当于 8 * 2 System.out.println("右移\t" + (a >> 1)); // 相当于 7 / 2 } }
注:移位运算比普通得 * 和 / 要快, 像乘2和除以2移位运算符是最快的
条件运算符
格式 | X ? Y : Z |
释义 |
如果X为true 返回 Y;X若为false 返回 Z |
字符串连接符
“+”运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个字符串转化为字符串任何进行连接
public class Test{ public static void main(String[] args){ String a = "3"; int b = 4; char c = 'h'; // 连接符要求至少有一个是String System.out.println(a + b); System.out.println(c + b); System.out.println("" + c + b); // 这个时候才是输出字符串 } }
运算符优先级
优先级 | 运算符 | 类 |
1 | () | 括号运算符 |
2 | !、+(正号)、-(负号) | 一元运算符 |
~ | 位运算符 | |
++ 、 -- | 递增和递减运算符 | |
3 | * 、/ 、% | 算术运算符 |
4 | +、- | 算术运算符 |
5 | << 、 >> | 位左移、右移运算符 |
6 | >、 >=、 <、 <= | 关系运算符 |
7 | == 、!= | 关系运算符 |
8 | & | 位运算、逻辑运算符 |
9 | ^ | 位运算、逻辑运算符 |
10 | | | 位运算、逻辑运算符 |
11 | && | 逻辑运算符 |
12 | || | 逻辑运算符 |
13 | ?: | 条件运算符 |
14 | =、+=、-=、*=、/=、 %= | 赋值运算符、扩展运算符 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)