前言:
本篇博客将为大家介绍Java中的运算符。
目录
概念
计算机最基本的作用就是执行数学运算,如
public class Demo1 {
public static void main(String[] args) {
int a = 19;
int b = 23;
int c = a+b;
System.out.println(c);
}
}
在这段代码中 a+b中的加号即是运算符(对操作数进行操作的符号)
各类运算符介绍
算术运算符
- 基本四则运算符:加减乘除模(+ - * / %)
- 增量运算符:加等 减等 乘等 除等 模等(+= -= *= /= %=)
- 自增自减运算符:++ --
基本四则运算符:加减乘除模(+ - * / %)
public class Demo1 {
public static void main(String[] args) {
int a = 21;
int b = 10;
System.out.println(a+b);
System.out.println(a-b);
System.out.println(a*b);
System.out.println(a/b);
System.out.println(a%b);
}
}
public class Demo1 {
public static void main(String[] args) {
System.out.println(10%3);
System.out.println(10%-3);
System.out.println(-10%3);
System.out.println(-10%-3);
System.out.println(11.5%2);
}
}
注意:
- 全为二元运算符,操作时左右两侧都必须要有数据
- int/int还是int类型,且向下取整(如:3/2=1.5,但是因为是int类型,只能保留整数部分,于是结果就是1,也不会四舍五入,若想要保留其带小数形式的结果,可以乘以一个1.0)
- 做除法和取模是,右操作数不能为0(除数不能为0)
- %不仅可以对整型取模,还可以对double类型取模,但是无意义,一般都是对整型取模
- 两侧操作数类型不一样时,向类型大的提升
增量运算符:加等 减等 乘等 除等 模等(+= -= *= /= %=)
public class Demo1 {
public static void main(String[] args) {
int a = 12;
a += 2;
System.out.println(a);
int b = 10;
b -= 3;
System.out.println(b);
int c = 15;
c /= 5;
System.out.println(c);
int d = 2;
d *= 3;
System.out.println(d);
int e = 21;
e %= 10;
System.out.println(e);
}
}
注意:
- 只有变量才可以使用这种运算符,常量不能使用这类运算符
- 这类运算符会帮我们进行类型转换
自增自减运算符:++ --
注意:
- ++是让变量+1,--是让变量-1
- ++a先自身加一,再计算,a--是先计算,得到的结果再减一。--也是一样的。
public class Demo1 { public static void main(String[] args) { int a = 2; a++; System.out.println(a); int b = 2; b = a++; System.out.println(b); System.out.println(a); }
- 只有变量才能用自增自减运算符,因为常量不可更改。
关系运算符
关系运算符主要有6个:== != > < <= >= ,其返回值为false或者true
public class Demo1 {
public static void main(String[] args) {
int a = 2;
int b = 3;
int c = 2;
System.out.println(a == c);
System.out.println(a == b);
System.out.println(a != b);
System.out.println(a > b);
System.out.println(a < b);
System.out.println(a >= c);
System.out.println(b <= c);
}
}
需要多次判断时,不能连着写(3<a<5)
逻辑运算符
逻辑运算符主要有三个:&& || !,运算结果都是Boolean类型
- 逻辑与:&&
语法规则:表达式1&&表达式2(表达式1和2的返回值都必须时Boolean类型)
当表达式1和2都为真时,结果才为真,否则就是假
- 逻辑或:||
语法规则:表达式1||表达式2(表达式1和2的返回值都必须是Boolean类型)
当表达式1和2都是假时,结果才是假,否则就是真
- 逻辑非:!
语法规则:!表达式
表达式为真,结果就是假;表达式为假,结果就是真。总之就是一句话:和表达式反着来。
- 短路求值
对于&&,如果左侧表达式为false,则结果一定时false,无需考虑右侧表达式(即使它不合法)
对于||,如果左侧表达式为true,则结果一定时true,无需考虑右侧表达式(即使它不合法)
但是对于&和|,它们不支持短路求值。
位运算符
Java中,数据存储的最小单位是字节,而数据操作的最小单位是比特位(一个字节占用8个比特位),位运算就是针对这些比特位的运算操作
位运算符主要有四个:& | ~ ^,其中~为一元运算符,剩下的三个都是二元运算符
按位与:& 二进制位数字都是1结果才是1,否则就是0
按位或:| 二进制位数字都是0则结果为0,否则就是1
按位取反:~ 二进制位数字如果是1,则转变成0;如果是0,就转变成1
按位异或:^ 二进制位相同为0,反之为1
注意:
- 若两个数相同,则异或的值就是0(全部位都一模一样,异或一下就全为0了,结果也就是0)
- 任何数和0异或得到的结果都是它本身
归纳:
可以结合上面的逻辑运算符来记忆和理解:把1看作真,0看作假。
按位与可以和逻辑运算符中的与(&&)联系,逻辑运算符中与&&要同为真才得到真,按位与也是如此,同为真(也就是1)才能得到真(1),否则就是假(0)
按位或和逻辑或(||)联系起来,逻辑运算符中或(||)要同为假才能得到假,按位或也是如此,同为假(0)才能得到假(0),否则就是真(1)
按位取反可以和逻辑运算符非(!)联系起来,逻辑运算符非(!)是让结果和表达式的结果相反,而按位取反也是如此,真(1)的按位取反后得到假(0)的,假(0)的按位取反后得到真的(1)
移位运算符
左移:<<
最左侧位不要了,最右侧补0
因为舍去的是符号位,所以经过左移以后,数的符号可能改变。
右移:>>
最右侧位不要了,最左侧位补符号位(正数补0,负数补1)
无符号右移:>>>
最右侧位不要了,最左侧补0
注意:
- 左移1位,相当于原数字*2;左移N位,相当于原数字*2的N次方
- 右移1位,相当于原数字/2;右移N位,相当于原数字/2的N次方
- 由于计算机中的移位运算的效率高于乘除,当某个代码正好乘除2的N次方的时候,可以用移位运算符代替
- 移动负数位或者移动位数过大都没有意义
条件运算符
条件运算符只有一个(也是Java中唯一一个三目运算符):布尔表达式:表达式1?表达式2
如果布尔表达式为真,得到表达式1的结果;反之得到表达式2的结果
注意:
- 表达式1和表达式2的结果返回值必须是同类型的,或者结果的数据类型可以发生类型隐式转换的
- 表达式不能单独存在,其结果必须要被使用。即,不能不写前面的布尔表达式。
运算符的优先级