运算符
算术运算符
赋值运算符
注意:
当我们计算以下代码的时候
short a = 10;
a = a + 10;
我们会因为没有进行强制类型转换系统会报错,但是当我们使用+=的时候,如下,却不会报错,因为使用此类赋值运算符的时候不会改变本身的数据类型
short a = 10;
a += 10;
比较运算符(关系运算符)
比较运算符的结果都是boolean型,要么是true,要么是false
逻辑运算符
- & 当两个都为true才为true
- && 当两个都为true才为true,与&的区别是,当&&左侧为false的时候,不会再计算右侧,直接返回false。而&左右两侧都会计算
- | 当有一个为tuue的时候就为true
- || 当有一个为tuue的时候就为true,与|的区别同上
- ! 当为false的时候才为true
- ^ 当一个为true另一个为false的时候结果才会为true,当两个都为true或者都为false的时候结果为false
位运算符
位运算符是直接对整数的二进制进行运算
左移右移运算符
当使用<<运算符的时候,其实就是运算符左侧是几,就拿左边的数去乘2的几次方,例如上面的例子:
3 << 2,位运算符左侧是3,右侧是2,就是3 * 2 * 2 = 12
结论:
在一定的范围内,每使用 << 移动一位,相当于 * 2
在一定的范围内,每使用 >> 移动一位,相当于 / 2
为什么是在一定的范围内呢,那是因为二进制也是有长度的,当我们计算3 << 33的时候相当于计算 3 << 2
如果有一道面试题是快速计算 2 * 8,这个时候就可以使用 2 << 3 或者 8 >> 1
无符号右移
其实跟使用 >> 类似,每使用 >> 移动一位,相当于 / 2,但是使用 >> 是有负数的,使用 >>> 没有负数,例如:
-3 >> 2 = -1;
-3 >>> 2 = 1073741823;
与运算
例如:12 & 5 = 4;
计算二进制,只有1 & 1时结果才为1,否则是0
或运算
例如:12 & 5 = 13;
计算二进制,只有0 | 0时结果才为0,否则是1
异或运算
例如:12 ^ 5 = 9;
相同二进制位进行^计算,结果是0; 1 ^ 1 = 0; 0 ^ 0 = 0;
不相同二进制位进行^计算,结果是1;1 ^ 0 = 1; 0 ^ 1 = 1;
取反运算
例如:~6 = -7;
包括符号位,所有0改为1,1改为0
三元运算符
格式:(条件表达式)?表达式1:表达式2
条件表达式里面是一个boolean类型,当为true时执行表达式1,当为false的时候执行表达式2
例如:获取两个数的最大值
int a = 2;
int b = 3;
int max = (a > b) ? a : b;
例如:获取三个数的最大值
int a = 1;
int b = 2;
int c = 3;
int i = (a > b) ? (a > c) ? a : c : (b > c) ? b : c;
所有使用三元运算符的地方都可以改为if-else,但是所有使用if-else的地方不一定能使用三元运算符
如果一个判断既能够使用if-else又能够使用三元运算符,优先使用三元运算符,三元运算符的运行效率更高
运算符的优先级
以下图片来自百度百科:
运算符优先级没必要记下来,如果想要哪一个运算优先运算,加一个括号就行了。
总结
关于Java基础知识运算符的总结就先到这了,如果有什么错误的地方,欢迎提出
下一篇将总结关于流程控制的相关知识
Java语法基础(流程控制篇)