JavaSE基础01-面向过程编程(要点)
1.使用括号进行强制类型转换
括号除了可以用来提升运算优先级,也可以用作强制类型转换,由于隐式类型转换存在局限性,比如此时我们希望将一个大的类型转换为一个小的类型:
正常情况下无法编译通过,但是实际上a的值并没有超出 short
的范围,理论上是可以直接给到b存放的,此时我们就可以使用强制类型转换:
public static void main(String[] args) {
int a = 10;
short b = (short) a; // 在括号中填写上强制转换的类型,就可以强制转换到对应的类型了
}
2.两种自增自减操作的区别
public static void main(String[] args) {
int a = 8;
a++; //自增运算符就是两个加号连在一起,效果是使a自增1
a--; //自减即相反,使a自减1
int b = 8;
++b; //自增运算符在前在后最终效果都是让变量自增1,是一样的
}
自增自减操作同样是有结果的,注意,这两种方式自增操作的结果不一样,我们来看下面的例子:
public static void main(String[] args) {
int a = 8;
int b = a++; //先出结果,再自增,b得到的是a自增前的值
int c = ++a; //先自增,再出结果,c得到的是a自增之后的结果
}
第一个结果为8,而第二个结果却是9,这是因为,自增运算符放在前面,是先自增再得到结果,而自增运算符放到后面,是先出结果再自增(自减同理),这个很容易记混,所以一定要分清楚。
3.位运算符
public static void main(String[] args) {
// 位运算符: & | ^ ~
int a = 9, b = 3;
// 按位实际上就是让这两个数每一位都进行比较:
// &:进行按位与运算,如果两个数的对应位都为1,则结果为1,否则为0,结果为1
int c = a & b;
// |:进行按位或运算,如果两个数的对应位有一个为1,则结果为1,否则为0,结果为11
int d = a | b;
// ^:进行按位异或运算,如果两个数的对应位不同,则结果为1,否则为0,结果为10
int e = a ^ b;
// ~:进行按位取反运算,结果为-(a+1),因为int类型是32位,所以结果为-10
int f = ~a;
}
Java中并没有乘方运算符,^
是按位异或运算符,不要记错了。
4.位移运算符
位移运算符: <<
, >>
, >>>
<<
: 左移运算符, 将一个数的二进制码整体左移指定位数, 左移后右侧空出的位用0填充;>>
: 右移运算符, 将一个数的二进制码整体右移指定位数, 右移后左侧空出的位用原来的符号位填充;>>>
: 无符号右移运算符, 将一个数的二进制码整体右移指定位数, 右移后左侧空出的位用0填充;
public static void main(String[] args) {
byte a = 1 << 2;
// 0000 0001 -> 0000 0100
// 即: 1 * 2^2 = 4
byte b = 8 >> 2;
// 0000 1000 -> 0000 0010
// 即: 8 / 2^2 = 2
int c = -1 >>> 1;
// 1111 1111 1111 1111 1111 1111 1111 1111 ->
// 0111 1111 1111 1111 1111 1111 1111 1111
// 即: 2^31 - 1 / 2 = 2^30 - 1
// 缩写形式
byte d = 1;
d <<= 2; // 直接运算符连上等号即可
}
注意,不存在无符号左移。
5.三元运算符
三元运算符可以根据判断条件,返回不同的结果,比如我们想要判断:
- 当a > 10时,给b赋值'A'
- 当a <= 10时,给b赋值'B'
我们就可以使用三元运算符来完成:
public static void main(String[] args) {
int a = 10;
char b = a > 10 ? 'A' : 'B'; //三元运算符需要三个内容,第一个是判断语句,第二个是满足判断语句的值,第三个是不满足判断语句的值
System.out.println(b);
}
三元运算符:
判断语句 ? 结果1 : 结果2
因此,上面的判断为假,所以说返回的是结果2,那么最后b得到的就是 B
这个字符了。
6.运算符优先级
优先级 | 运算符 | 结合性 |
---|---|---|
1 | ( ) | 从左向右 |
2 | ~ - + (强制类型转换) ++ -- | 从右向左 |
3 | * / % | 从左向右 |
4 | + - | 从左向右 |
5 | << >> >>> | 从左向右 |
6 | > < >= >= | 从左向右 |
7 | == != | 从左向右 |
8 | & | 从左向右 |
9 | ^ | 从左向右 |
10 | ||
11 | && | 从左向右 |
12 | ||
13 | ? : | 从右向左 |
14 | = += -=*= /= %= &= | = ^= <<= >>= >>>= |