3.2.1 运算符
- 算术运算符: +,―,*,/,%,++,--
- 关系运算符: >,<,>=,<=,==,!=
- 逻辑运算符: !,& , | , ^ , &&,||
- 位运算符: &,|,^,~ ,>>,<<,>>>
- 赋值运算符: = 扩展赋值运算符:+=,―=,*=,/=
- 字符串连接运算符: +
算术运算符
- +,―,*,/,%,++,――
- 有关/ 15/4 (整除)15.0/2(实数除法)
- 有关% 100%3 100%-3 -100%-3 -100%3
- 有关%的含义偶数a %2, 整除a%7, 个位a%10
- 有关++, --a=5; a++; b=a*2
- a=5; b = ++ a *2;
- a=5; b = a++ *2;
- ^不是乘方
逻辑运算符(1)
- 逻辑运算符功能
- !逻辑非& 逻辑与| 逻辑或
- ^ 逻辑异或&& 短路与|| 短路或
- 逻辑运算符功能说明:
逻辑运算符(2)
- 短路(short-circuit)逻辑运算符
- && --第一个操作数为假则不判断第二个操作数
- || --第一个操作数为真则不判断第二个操作数
- MyDated;
if ((d!=null) && (d.day>31)) {
//do something with d
}
if(i<0 || i>31 ) {
System.out.println("非法赋值");
}
位运算符
- 位运算符功能
- ~ 取反& 按位与| 按位或^ 按位异或
- 位运算符功能说明:
移位运算符(1)
- 左移
"a<<b; "将二进制形式的a逐位左移b位,最低位空出的b位补0;
- 带符号右移
"a>>b; "将二进制形式的a逐位右移b位,最高位空出的b位补原来的符号位;
- 无符号右移
"a>>>b;"将二进制形式的a逐位右移b位,最高位空出的b位补0。
移位运算符(2)
- 移位运算符性质
适用数据类型:byte、short、char、int、long
对低于int型的操作数将先自动转换为int型再移位(整型提升,对所有的运算都是这样)
对于int型整数移位a>>b,系统先将b对32取模,得到的结果才是真正移位的位数
对于long型整数移位时a>>b,则是先将移位位数b对64取模
移位运算符(3)
移位运算符应用举例:
public class BitwiseOperators{ public static void main( String args[] ){ int a = 0b1100; int b = 0b1010; print("a ",a); print("b ",b); print("a&b",a&b); print("a|b",a|b); print("a^b",a^b); print("~a",~a); print("a<<2",a<<2); print("a>>2",a>>2); print("a>>>2",a>>>2); } static void print(String prefix, int n ){ String s = Integer.toBinaryString(n); while(s.length() < 4) s= "0"+s; System.out.println(prefix + " " + s); } }
赋值运算符(1)
赋值运算符=
当“=”两侧的数据类型不一致时,可以适用默认类型转换或强制类型转换(casting)原则进行处理
long l = 100;
inti= (int)l;
特例:可以将整型常量直接赋值给byte, short, char等类型变量,而不需要进行强制类型转换,只要不超出其表数范围
byte b = 12; //合法
byte b = 4096; //非法
扩展赋值运算符
字符串连接运算符+
- "+" 除用于算术加法运算外,还可用于对字符串进行连接操作
inti= 300 +5;
String s = "hello, " + "world!";
- "+"运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后再进行连接
inti= 300 +5;
String s = "hello, " + i+ "号";
System.out.println(s); //输出:hello, 305号
- 该运算符大大简化了字符串的处理
3.2.2 表达式
- 表达式是符合一定语法规则的运算符和操作数的序列
a
5.0 + a
(a-b)*c-4
i<30 && i%10!=0
- 表达式的类型和值
对表达式中操作数进行运算得到的结果称为表达式的值
表达式的值的数据类型即为表达式的类型
- 表达式的运算顺序
首先应按照运算符的优先级从高到低的顺序进行
优先级相同的运算符按照事先约定的结合方向进行
运算符优先级与结合性
- 适当使用括号
表达式中的类型转换
- 当有不同种类的混合运算时:
- int→long→float→double
- 整型提升
所有的byte, short, char 参与算术运算等转为int
查看反汇编的代码
使用javap –c 类名
(本页内容摘自:https://www.icourse163.org/learn/PKU-1001941004?tid=1002731007#/learn/content?type=detail&id=1003758031&sm=1)