0%

Java 面向对象(三)—— 操作符

第三章 操作符

1、别名现象

赋值操作是对一个对象的引用,对象与对象相互赋值则丢失信息

2、生成数字:Random 类

  • nextInt / nextFloat …

3、可使用一元加减号

1
2
3
4
// 以下操作均合法
x = -a;
x = a * -b;
s = a * (-b);

4、关系操作符

  • 若为基本类型,直接比较

  • 不为基本类型,使用所有对象都适用的特殊方法 equals ()

    • 默认执行比较引用,不可用于自己的新类
1
2
3
4
5
6
7
8
9
10
11
n1.equals(n2)
// 以下返回行为不正确
class myclass{
int i;
}
public class wrongdoing{
myclass v1 = new v1;
myclass v2 = new v2;
System.out.println(v1.equals(v2));
}
// false
  • 三元操作符

1
2
// condition ? ex1 : ex2;
x < y ? x : y;

5、逻辑运算符

与或非仅可用于布尔值

1
2
3
4
// 错误实例
printf("i && j is" + (i && j));
printf("i && j is" + (i || j));
printf("i && j is" + !i);

6、直接常量

  • 后缀 L / F /D …

  • 前缀 0x / 0 / 0b

  • 可为数字字面量添加下划线,更可读(e.g. 1_000_000)

  • 指数

    • 注:结果不为一个数,返回 NaN(e.g. 0/0)
1
expfloat = 1.39E-43f

7、按位操作符

&= |= ^= 均合法

8、移位操作符 >> <<

  • 无符号右移:>>>,无论正负均在高位插入 0

    • 对 byte /short:会先转为 int,右移、截断、赋值,可能得到 - 1 结果
    • 推广:只要类型比 int 小均会被转换,可根据需求使用 cast 手动类型转换 / 提升
  • 与等号组合:>>= <<=,移动等号左边指定的位数

9、移植:无需考虑,不同机器均相同

  • 因而无 sizeof 操作符

注:溢出结果不会收到警告或出错

10、浮点数四舍五入

  • 得到最接近整数:使用 Max.round () 方法

1
2
double x = 9.997
int nx = (int) Math.round(x);