JavaSE基础01-面向过程编程(要点)

1.使用括号进行强制类型转换

括号除了可以用来提升运算优先级,也可以用作强制类型转换,由于隐式类型转换存在局限性,比如此时我们希望将一个大的类型转换为一个小的类型:

En2uzTl5PFgKeNX

正常情况下无法编译通过,但是实际上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 = += -=*= /= %= &= = ^= <<= >>= >>>=

The best code is no code at all.