《Java编程思想》读书笔记3.操作符

来源:互联网 发布:演讲书籍推荐知乎 编辑:程序博客网 时间:2024/06/15 06:38

第3章 操作符

3.1 更简单的打印语句
……

3.2 使用Java操作符
基本类型 + - * / =
所有对象 = == !=
String类 + +=

3.3 优先级
用括号明确

3.4 赋值
基本数据类型a=b 复制值
对象c=d 复制引用,指向同一对象

方法调用中的别名问题
对象传递给方法时仅传递引用

3.5 算术操作符

Random rand = new Random(47); //提供种子int j = rand.nextInt(100) + 1; //1~100

一元加、减操作符
x = a * (-b); //加括号更明确
一元加号:将较小类型的操作数提升为int

3.6 自动递增和递减
前缀/后缀递增/递减

3.7 关系操作符

测试对象的等价性
== != 仅比较对象的引用
对象使用equals()方法
但自建类虽覆盖equals()方法,默认是比较引用

3.8 逻辑操作符
浮点数的比较是非常严格的

短路
一旦能够明确整个表达式的值就不再计算余下部分
boolean b = (0 < 1) && (2 < 2) && (2 < 3); //仅计算前两项

3.9 直接常量

int i1 = 0x2f; // Hexadecimal (lowercase)int i2 = 0X2F; // Hexadecimal (uppercase)int i3 = 0177; // Octal (leading zero)long n1 = 200L; // long suffixlong n2 = 200l; // long suffix (but can be confusing)float f2 = 1F; // float suffixfloat f3 = 1f; // float suffixdouble d1 = 1d; // double suffixdouble d2 = 1D; // double suffix
Integer.toBinaryString(i1);Long.toBinaryString(l1);Integer.toBinaryString(c); // char c,较小的类型将自动转换为int

指数记数法

float expFloat = 1.39e-43f; // 1.39*10^(-43)double expDouble = 47e47d; // 'd' is optional

指数作double处理,用尾随的f转换成float

3.10 按位操作符
&|^异或 ~
&= |= ^=
布尔类型不能执行按位“非”,对布尔值按位操作不会“短路”

3.11 移位操作符
<< <<= 左移位,低位补0
>> >>= “有符号”右移位
>>> >>>= “无符号”右移位,高位插入0
charbyteshort移位会先转为int,结果也是int>>>=赋值给原来类型会被截断
二进制表示形式 有符号的二进制补码

3.12 三元操作符if-else
boolean-exp ? value0 : value1
可读性差

3.13 字符串操作符++=
字符串起头,后续操作数都是字符串型
e.g. s + i1 + i2 + i3; // s for String, i for int
int + StringString类型

int x = 0;print("" + x); // "" + x, shorthand for Integer.toString(x)

3.14 使用操作符时常犯的错误
while (x = y) {} // 编译错误,int不会自动转换成boolean,除非x和y都为布尔值

3.15 类型转换操作符
窄化转换 必须显式否则报错
扩展转换 不必显式
boolean不允许进行任何类型转换

截尾和舍入
截尾 浮点转换为整型
舍入 Math.round();

提升
执行算术运算或按位运算,类型比int小会转换成int,结果也是int
表达式中出现的最大数据类型决定结果的数据类型

3.16 Java没有sizeof
因为所有数据类型在所有机器大小相同

3.17 操作符小结

short x, y;x = (short)(x + y); // 显式转换

复合赋值(如+=)不需要类型转换

乘法溢出不会报错

3.18 总结
……

0 0
原创粉丝点击