运算符 (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 | =、+=、-=、*=、/=、 %= | 赋值运算符、扩展运算符 |


浙公网安备 33010602011771号