3.1 更简单的打印语句
- 打印语句,可以进行进一步的封装成print,但没必要使用
System.out.println("我是Java");
3.2 使用Java操作符
- 操作符作用于操作数,生成一个新值
- 几乎所有的操作符都只能操作“基本类型”。但“=”,“==”和“!="可以操作对象
3.3 优先级
- 用括号明确计算顺序
3.4 赋值
- 必须有一个物理空间可以存储等号右边的值
- 对象的赋值是通过引用来的,基本类型存储实际的数值
- 方法调用中的别名问题
3.5 算术操作符
- 和C/C++差不多
- 随机数种子用于初始化随机数序列,若固定种子,则相应的随机数可以重现
- 一元加号,可以将较小类型的操作数提升为int
3.6 自动递增和递减
- 和C/C++一样
3.7 关系操作符
- 测试对象的等价性
- 比较两个对象的实际内容是否相同,采用对对象的特殊方法equals()
public class EqualsMethod{
public static void main(String[] args){
Integer n1 = new Integer(47);
Integer n2 = new Integer(47);
System.out.println(n1.equals(n2));
}
}
- 由于equals()的默认行为是比较引用,所以除非在自己的新类中覆盖以equals()方法,否则不可能表现出我们希望的行为
- 大多数Java类库都实现了equals()方法,以便用来比较对象的内容,而非比较对象的引用
3.8 逻辑操作符
- 与、或、非,和C/C++不同的是:不可将一个非布尔值当做布尔值在逻辑表达式中使用
- 短路:一旦能够准确无误地确定整个表达式的值,就不再计算表达式余下的部分
3.9 直接常量
- 直接常量后面的后缀字符标识了它的类型
L:long
F:float
D:double
- 十六进制适用于所有整数数据类型
0x:前缀来表示,用0-9,a-f来表示
- 八进制由前缀0以及后续的0-7的数字来表示
- 通过Integer和Long类的Integer.toBinaryString()可以转换成二进制
- 指数计数法
float f4 = 1e-43f //默认是double,float用于转型
3.10 按位操作符
- 按位操作符用来操作整数基本数据类型中的单个“比特”,即二进制位。
&:与
|:或
~:非
^:异或
3.11 移位操作符
- 移位操作符的运算对象也是二进制的。
- 移位操作符只可以用来处理整数类型(基本类型的一种)
<<:左移操作符,低位补0
>>:右移操作符,'有符号'使用“符号扩展”,若符号为正,高位插0
>>>:Java中增加的一种“无符号”右移位操作符,它使用“零扩展”
- “移位”可与”等号“组合使用,此时,操作符左边的值会移动由右边的值指定的维数,再将得到的结果赋给左边的变量
<<=
>>=
>>>=
3.12 三元操作符 if-else
boolean-exp ? value0 : value1
3.13 字符串操作符 + 和 +=
- +可用于字符串的转换
3.14 使用操作符时常犯的错误
- 在判断相等的时候用了“=”,应该使用“==”,Java不会将其他类型转换为boolean类型,故会报编译错误
3.15 类型转换操作符
- 隐式类型转换
- 显式类型转换
int i = 200;
long lng = (long)i;
- 截尾和舍入:类型转换总是进行截尾处理,可用java.lang.Math中的round()方法进行舍入
- 有些操作自动提升为范围更大的类型
3.16 Java没有sizeof
- Java不需要sizeof()操作符来满足这方面的需要,因为所有数据类型在所有机器中的大小都是相同的。
3.16 操作符小结
- 能够对布尔值进行的运算非常有限
- 窄化转换可能会造成信息的丢失
- int类型如果过大也会溢出,注意类型转换
- 对于char,byte或者short,符合赋值并不需要类型转换。
3.18 总结
Java的操作符与C/C++类似。