三、操作符
3.1 更简单的打印语句
import static sun.misc.Version.print;
print();
3.2 使用java操作符
操作符能接受一个或多个参数,并生成一个新值。
基本类型:+,-,*,/,=
对象:=,==,!=
String还支持:+,+=
3.3 优先级
先乘后加减 ,括号优先
String后面跟一个+后又跟着非String元素时,会转换为String
3.4 赋值
=取右边值给左边的
3.4.1 方法调用中的别名问题
两个对象含有同名的变量
public static void main(String[] args) {
Test t1 = new Test();
Test t2 = new Test();
t1.value = 1;
t2.value = 2;
print("t1 = "+t1+"t2 = "+t2);
t1 = t2;//对t1赋值这个引用就会被覆盖别名现象;为避免就用t1.value = t2.value;
print("t1 = "+t1+"t2 = "+t2);
t1.vlaue = 3;
print("t1 = "+t1+"t2 = "+t2);
}
//output
t1 = 1 t2 = 2
t1 = 2 t2 = 2
t1 = 3 t2 = 3
3.5 算术操作符
3.5.1 一元加、减操作符
3.6 自动递增和递减
前缀式:++i --i 会先执行运算,再生成值
后缀式:i++ i-- 会生成值,再执行运算
3.7 关系操作符
boolean:true false
<,>,<=,>=,==,!=
3.7.1 测试对象的等价性
==比较两个值是否相等,如果是对象比较两个对象地址是否相同
比较两个对象的内容是否相等用equals()
3.8 逻辑操作符
与&& 或|| 非!根据参数逻辑关系生成布尔值;对浮点数要求严格,有差就不等同
3.8.1 短路
一旦能够明确无误的确定整个表达式的值,就不再计算表达式余下部分了。
例如 test1(0)&&test2(1)&&test3(2) 加入test1为true,继续执行,test2为false,结果肯定为false所以后边不会计算
3.9 直接常量
后缀字符标志了类型L为long,F为float,D为double
前缀0x十六进制数后跟随0-9或小写a-f表示。
3.9.1 指数计数法
e代表2.718
1.39e == 1.39*2.718^-43
3.10 按位操作符
&与 |或 ~非 ^异或
5二进制是 0000 0000 0000 0101
4二进制是 0000 0000 0000 0100
5&4 : 0000 0000 0000 0100//相同位都为1为1,否为0
5|4 : 0000 0000 0000 0101//相同位有一个为1即为1
5^4 : 0000 0000 0000 0001//相同位只有一个1即为1
~5 : 1111 1111 1111 1010//1为0,0为1
3.11 移位操作符
<<左移位 右侧指定位数将操作符左边的操作数向左(低位补0)
>>右移位 右侧指定位数将操作符左边的操作数向右;有符号扩展;符号为正高位插0;符号为负,高位插1
>>>"零扩展":无论正负都在高位插0.
3.12 三元操作符 if-else
三元操作符也称条件操作符
布尔表达式?value0 :value1
若为true就value0;false就value1
3.13 字符串操作符+和+=
int x = 0,y = 1,z = 2;
String s = "s"
print(s+x+y+z);
print(x+""+s);
print(s+(x+y+z));
//output
s012
0s
s3
3.14 使用操作符时常犯的错误
=用成==;按位与和按位或用成与和或
3.15 类型转换操作符
大转小窄化转换(强制类型转换);小转大扩展转换
3.15.1 截尾和舍入
float和double转换为int要截尾,例如29.7转int为29
想要得到舍入的结果就要用java.lang.Math.roud()方法
3.16 java没有sizeof
sizeof()操作符可为数据项分配字节数。java不需要所有的数据类型在机器中大小都是相同的。