3.1 更简单的打印语句
3.2 使用Java操作符
3.3 优先级
3.4 赋值
基本类型直接复制了值
对象赋值实际上是将引用从一个地方复制到另一个地方
A c = new A();
A d = new A();
c = d;
//实际上是将d指向的对象赋值给了c,c和d作为同一个对象的引用
参数传递,实际上传递的是引用
class Letter {
char c;
}
public class PassObject {
//参数传递,实际上传递的是引用,实际上修改了f()之外的对象
static void f(Letter y) {
y.c = 'z';
}
public static void main(String[] args) {
Letter x = new Letter();
x.c = 'a';
System.out.println(x.c);
f(x);
System.out.println(x.c);
}
}
3.5 算数操作符
3.6 自动递增和递减
3.7 关系操作符
==操作符
class A {
int a;
}
public class Equivalence {
public static void main(String[] args) {
A n1 = new A();
A n2 = new A();
n1.a = 1;
n2.a = 1;
System.out.println(n1 == n2);
System.out.println(n1 != n2);
}
}
//==只有在两个对象为同一个对象时才判为相等
equals()
n1.equals(n2); //false
//自己编写的类A中equals的默认行为是比较引用,
//所以必须覆盖equals()方法后才能使n1和n2相等
Integer i1 = new Integer(1);
Integer i2 = new Integer(2);
i1.equals(i2); //true
//Integer 包装器的equals()方法,仅比较里面的int值
3.8 逻辑操作符
aaa && bbb && ccc
//短路
3.9 直接常量
1.39E-43f //表示1.39 * 10^-43
3.10 按位操作符
3.11 移位操作符
只有整数可以移位
如果对byte或者short进行移位,可能会被先转化成int类型,再进行右移,最后被截断
3.12 三元操作符
boolean_exp ? value1 : value2;
3.13 字符串操作符+和+=
Java程序员不能实现自己的重载操作符
int x = 0,y = 1,z = 2;
String s = "x, y, z ";
print(s + x + y + z);//x, y, z 012
如果字符串操作符表达式以一个字符串起头,后面所有操作数必须是字符串类型
3.14 类型转换操作符
- 窄化转换可能造成信息丢失,必须显式写出来
- 扩展转化则不必进行显式的类型转化
- 将float或double类型转化为int型时,会对该数字进行截尾操作
- 如果想把值赋给较小类型的数据,就必须进行窄化转化
如果计算一个表达式,则结果为表达式中最大的数据类型,如 float*double 得到一个double类型数 - 对 char, short, byte 进行算数运算,会得到 int 型的结果,必须对数据进行窄化得到原有类型