自学Java8

55 阅读2分钟

引言

  • 在记录自己自学java过程中,首先声明关于学习顺序可能并不很科学,即使我也是通过一些公开的资料来进行学习,但不会是完全无基础的教学,更像是比对着python(本人平时编程使用的是python)比较实现方法的异同学习,请酌情参考学习,有理解不对的地方欢迎指正。

java基础 - 4

java的位移运算

  • 感觉目前写python代码时候还未遇到该场景,遇到后补充

位运算

  • 位运算是按位进行与、或、非和异或的运算(有点像T和F,但是又不一样,蛮神奇的)
  • 与规则是,必须两个数同时为1,结果才为1:(同时成立and)
n = 0 & 0; // 0
n = 0 & 1; // 0
n = 1 & 0; // 0
n = 1 & 1; // 1
  • 或运算的规则是,只要任意一个为1,结果就为1:或运算的规则是,只要任意一个为1,结果就为1:(or)
n = 0 | 0; // 0
n = 0 | 1; // 1
  • 非运算的规则是,0和1互换:(有点像取对的感觉,在python中没怎么用过这个情况)
n = ~0; // 1
n = ~1; // 0
  • 异或运算的规则是,如果两个数不同,结果为1,否则为0:(和与规则还不一样)
n = 0 ^ 0; // 0
n = 0 ^ 1; // 1
n = 1 ^ 0; // 1
n = 1 ^ 1; // 0
  • 但是位远算不只是用于0和1,容易误解成T和F,也可以用于整数计算,实际上就是按位对齐,然后依次对每一位进行运算,如下图0和100的位运算,结果是0,目前还未发现这个用法用于干嘛,后续待补充

运算优先级

  • 在Java的计算表达式中,运算优先级从高到低依次是:(反正提高优先级就加括号就完了)
    • ()
    • ! ~ ++ --
      • / %
    • << >> >>>
    • &
    • |
    • += -= *= /=

类型自动提升与强制转型

  • 由于java中变量或者常量类型需要定义的比较详细,所以在运算过程中,如果参与运算的两个数类型不一致,那么计算结果为较大类型的整型。例如,short和int计算,结果总是int,自动提升也很好理解,取大范围的不容易出错
  • 也可以将结果强制转型,即将大范围的整数转型为小范围的整数。强制转型使用(类型),例如,将int强制转型为short:
int i = 12345;
short s = (short) i; // 12345
  • 注意强制转型要符合规则,超出范围就会得到错误的结果