对常量或者变量进行操作的符号就是运算符,Java中提供了很多种运算符,例如:算术运算符、赋值运算符、比较运算符、逻辑运算、条件运算符...
算术运算符代码示例
public class Demo {
public static void main(String[] args) {
int a = 3;
int b = 4;
System.out.println(a + b);// 7
System.out.println(a - b);// -1
System.out.println(a * b);// 12
System.out.println(a / b);// 0
System.out.println(a % b);// 3
//商*除数 + 余数 = 被除数
System.out.println(5 % 2);//1
System.out.println(5 % -2);//1
System.out.println(-5 % 2);//-1
System.out.println(-5 % -2);//-1
}
}
注意事项:
- 如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。 但被模数是负数则不可忽略。
- 整数之间做除法时,只保留整数部分而舍弃小数部分。整数使用以上运算符,无论怎么计算,也不会得到小数
“+”号的两种用法
- 用法一:对于+两边都是数值的话,+就是加法的意思
- 用法二:对于+两边至少有一边是字符串得话,+就是拼接的意思
public class Demo {
public static void main(String[] args) {
//对于+两边都是数值的话,+就是加法的意思
System.out.println(3 + 4);//7
//对于+两边至少有一边是字符串得话,+就是拼接的意思
String str2 = "Java";
// String + int --> String
System.out.println(str2 + 520); // Java520
// String + int + int
// String + int
// String
System.out.println(str2 + 5 + 20); // Java520
}
}
自加自减运算
++ 运算,变量自己的值加1。反之,-- 运算,变量自己的值减少1,用法与++ 一致。
单独使用
变量在单独运算的时候,变量前++和变量后++,变量的是一样的;
- 变量前++ :例如 ++a 。
- 变量后++ :例如 a++ 。
public class Demo {
public static void main(String[] args) {
// 定义一个int类型的变量a
int a = 3;
++a;
System.out.println(a);//4
a++;
// 无论是变量前++还是变量后++,结果都是加1
System.out.println(a);//5
}
}
复合使用
和其他变量放在一起使用或者和输出语句放在一起使用,前++和后++就产生了不同。
- 变量前++ :变量先自身加1,然后再取值。
- 变量后++ :变量先取值,然后再自身加1。
public class Demo {
public static void main(String[] args) {
// 其他变量放在一起使用
int x = 3;
// y的值是4,x的值是4,
int y = ++x;
System.out.println(y);//4
System.out.println(x);//4
int a = x++;
// a的值是4,x的值是5
System.out.println(a); //4
System.out.println(x); //5
System.out.println("==========");
// 和输出语句一起
int z = 5;
// 输出结果是6,z的值也是6
System.out.println(++z);//6
// 输出结果是6,z的值是7
System.out.println(z++);//6
System.out.println(z);//7
int i = 1;
int j = i++ + ++i * i++;
System.out.println(j); //10
}
}
赋值运算符
赋值运算符,就是将符号右边的值,赋给左边的变量。
代码示例
public class Demo {
public static void main(String[] args) {
int a = 3;
int b = 4;
//基本赋值运算符
a = a + b;
System.out.println(a); // 7
System.out.println(b); // 4
int c = 30, d = 20;
//c = c % d
c %= d;
System.out.println(c);//10
System.out.println(d);//20
}
}
注意事项:
- 运算结果的数据类型和左侧变量的数据类型不一致,隐藏强制类型转换
- 整数常量只要不超出所赋值的整数变量的取值范围,可以直接赋值,内部隐藏强制类型转换
- 基本赋值运算符,支持连续赋值。不建议使用,阅读性不好。
public class Demo {
public static void main(String[] args) {
short s = 3;
// s = s + 4; 代码编译报错,因为将int类型的结果赋值给short类型的变量s时,可能损失精度
s += 4; // 代码没有报错
//因为在得到int类型的结果后,JVM自动完成一步强制类型转换,将int类型强转成short
System.out.println(s);//7
int j = 1;
j += ++j * j++;//相当于 j = j + (++j * j++);
System.out.println(j);//5
}
}
关系运算符/比较运算符
关系运算符有6种关系,分别为小于、小于等于、大于、等于、大于等于、不等于。
代码示例
public class Demo {
public static void main(String[] args) {
int a = 3;
int b = 4;
System.out.println(a < b); // true
System.out.println(a > b); // false
System.out.println(a <= b); // true
System.out.println(a >= b); // false
System.out.println(a == b); // false
System.out.println(a != b); // true
}
}
注意事项:
- 比较运算符,是两个数据之间进行比较的运算,运算结果一定是boolean值true或者false 。
- 其中>,<,>=,<=不支持boolean,String类型,
- ==和!=支持boolean和String。
- 千万不要把“==”误写成“=”,"=="是判断是否相等的关系,"="是赋值。
逻辑运算符,是用来连接两个布尔类型结果的运算符(!除外),运算结果一定是boolean值true或者false
代码示例
public class Demo {
public static void main(String[] args) {
int a = 3;
int b = 4;
int c = 5;
// & 与,且;有false则false
System.out.println((a > b) & (a > c));
System.out.println((a > b) & (a < c));
System.out.println((a < b) & (a > c));
System.out.println((a < b) & (a < c));
System.out.println("===============");
// | 或;有true则true
System.out.println((a > b) | (a > c));
System.out.println((a > b) | (a < c));
System.out.println((a < b) | (a > c));
System.out.println((a < b) | (a < c));
System.out.println("===============");
// ^ 异或;相同为false,不同为true
System.out.println((a > b) ^ (a > c));
System.out.println((a > b) ^ (a < c));
System.out.println((a < b) ^ (a > c));
System.out.println((a < b) ^ (a < c));
System.out.println("===============");
// ! 非;非false则true,非true则false
System.out.println(!false);
System.out.println(!true);
}
}
&&和&区别,||和|区别
- &&和&结果一样,&&有短路效果,左边为false,右边不执行;&左边无论是什么,右边都会执行。
- ||和|结果一样,||有短路效果,左边为true,右边不执行;|左边无论是什么,右边都会执行。
public class Demo {
public static void main(String[] args) {
int a = 2;
System.out.println((3 > 5) && (++a > 2));//false
System.out.println(a);//2: 说明++a没有计算,&&右侧的表达式没有执行
int b = 2;
System.out.println((3 > 5) & (++b > 2));//false
System.out.println(b);//3
System.out.println("-------------------");
int c = 2;
System.out.println((3 < 5) || (++c > 2));//true
System.out.println(c);//2
int d = 2;
System.out.println((3 < 5) | (++d > 2));//true
System.out.println(d);//3
}
}
三元运算符
格式: 数据类型 变量名称 = 布尔表达式1 ? 表达式2 : 表达式3;
计算方式:
- 计算布尔表达式1的结果,看是true还是false
- 如果布尔表达式1的结果为true,就把表达式2的结果赋值给左侧的变量
- 如果布尔表达式1的结果为false,就把表达式3的结果赋值给左侧的变量
代码示例
public class Demo {
public static void main(String[] args) {
//1:定义三个变量用于保存和尚的身高,单位为cm,这里仅仅体现数值即可。
int h1 = 150;
int h2 = 210;
int h3 = 165;
//2:用三元运算符获取前两个和尚的较高身高值,并用临时身高变量保存起来。
int temp = h1 > h2 ? h1 : h2;
//3:用三元运算符获取临时身高值和第三个和尚身高较高值,并用最大身高变量保存。
int max = temp > h3 ? temp : h3;
//4:输出结果
System.out.println("这三个和尚中身高最高的是:" + max + "cm");
}
}
位运算符
位运算符指的是二进制位的运算,先将十进制数转成二进制后再进行运算。在二进制位运算中,1表示true,0表示false。位运算是直接对二进制进行运算
代码示例
public class Demo {
public static void main(String[] args) {
System.out.println(12 << 1); // 24
System.out.println(12 << 2); // 48
}
}
运算符优先级
运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。 我们可以使用小括号来调整表达式的运算顺序。



