OCA/OCP Java Note (5): Operators and Statements

1. Working with Binary Arithmetic Operators

1.1. Arithmetic Operators

  Java中的求模运算可以作用于负数和浮点,对于给定的除数y和为负的被除数,求模的结果位于(-y + 1)和0之间。

1.2. Numeric Promotion

  数值类型自动转换(提升)规则:

  1. 如果两个值具有不同的数据类型,Java将自动把其中一个值的数据类型转换(提升)为较大的那个数据类型。
  2. 如果一个值是整型,另一个值是浮点,Java将自动把整型提升浮点值的数据类型。
  3. 较小的数据类型,即byte、short、char,在用于二元运算符时,即便参与运算的两个值都不是int,这些较小的数据类型都会首先会被提升为int。
  4. 在所有的提升和运算完成之后,运算结果的数据类型与提升后的数据类型相同。

eg. What is the data type of x + y?

答案:无法编译,浮点字面值默认为double,将float y = 2.1改为float y = 2.1f,结果为double。

2. Working with Unary Operators

2.1. Increment and Decrement Operators

eg.

运算顺序:

输出:

3. Using Additional Binary Operators

3.1. Assignment Operators

  Java会自动将较小的类型提升为较大的类型,但如果尝试将较大的类型转换为较小的类型,将给出编译错误。

eg.

3.2. Equality Operators

  相等运算符用于以下三种情况:

  1. 比较两个数值基本类型。如果两个数值的数据类型不同,将按照如前所述的规则进行提升,例如5 == 5.00会返回true,因为左边的5会自动提升为double。
  2. 比较两个boolean值。
  3. 比较两个对象,包括null和String

eg. 

4. Understanding Java Statements

4.1. The if-then-else Statement

  if后要使用boolean表达式,否则会出现编译错误。

eg.

4.2. Ternary Operator

  三元运算符中的第二个和第三个表达式不一定要具有相同的类型,但需要注意和赋值运算符一同使用的情况。

eg.

  在Java 7中,运行时只会计算三元运算符中符合条件的一个右值表达式,另一个表达式相当于被短路。 

eg.

4.3. The switch Statement

  switch支持的类型包括:

  • int and Integer
  • byte and Byte
  • short and Short
  • char and Character
  • int and Integer
  • String
  • enum values

注意:switch不支持boolean和long,及其对应的包装类。case语句后的值必须是编译时常量,可使用字面值、枚举常量和final常量,且和用于switch的值具有相同类型。