这节内容很多,但很简单又很重要。
Java种的运算符分为算术、赋值、比较、逻辑和条件五种。
算术运算符
包含五种:加+ ,减- ,乘* ,除/ 和求余% 。
该类运算符即对变量或数据进行算术运算的。对整数进行除法运算时,所得结果为舍去小数点后部分的整数。必须有小数参与运算,结果才能为小数。
public class OperatorDemo01 {
public static void main(String[] args) {
/*--- 算术运算符 +, -, *, /, % ---*/
int a = 6, b = 4;
System.out.println(a + b);
System.out.println(a - b);
System.out.println(a * b);
System.out.println(a / b);
System.out.println(a % b);
// 整数相除只能得到整数
System.out.println(6.0 / 4);
}
}
运行结果:
10
2
24
1
2
1.5
准确地说,算术运算符还有以下两种:++ 和-- 。这两种叫自增自减运算符,但这两种运算对赋值有影响,所以放到赋值运算符里讲。
赋值运算符
包含6种:= ,+= ,-= ,*= ,/= 以及%= 。
赋值运算符,顾名思义其作用就是对变量进行赋值。它的核心运算符只有一个:直接赋值运算符= 。其他的五种运算符都是围绕它对原变量进行算术运算后再赋值。如b += a
等价于b = b + a
。
自增自减运算符单独使用时对结果不产生影响,即a++
等价于++a
等价于a = a + 1
,这一特点常被用于循环变量中。如果自增自减运算符出现在赋值语句中,则其位置会对结果产生影响:
b = a++
等价于b = a; a = a +1
,即先赋值后运算;
b = ++a
等价于a = a +1; b = a
,即先运算后赋值。
public class OperatorDemo02 {
public static void main(String[] args) {
/*--- 赋值运算符 =, +=, -=, *=, /=, %= ---*/
int i = 10;
System.out.println("i: " + i);
i += 10;
System.out.println("i: " + i);
/* 注意:扩展的赋值运算符底层隐含了强制类型转换 */
short s = 10;
s += 10;
// 等价于 s = (short)(s + 10);
System.out.println("s: " + s);
System.out.println();
/*--- 自增自减运算符 ++, -- ---*/
int i1 = 10, i2 = 10;
// 先赋值后运算
int j1 = i1++;
// 先运算后赋值
int j2 = ++i2;
System.out.println(i1 + " " + j1);
System.out.println(i2 + " " + j2);
}
}
输出结果:
i: 10
i: 20
s: 20
11 10
11 11
比较运算符
包含六种:大于> ,小于< ,大于等于>= ,小于等于<= ,等于== ,不等于!= 。
比较运算符是对两边数据进行比较的。若关系成立则返回布尔值true,关系不成立则返回false。
public class OperatorDemo03 {
public static void main(String[] args) {
/* 关系运算符 ==, >, <, >=, <=, != */
int i = 10;
int j = 20;
int k = 30;
System.out.println(i + j == k);
// 若将 == 写成 = ,则把j的值赋给i,然后输出i的值
System.out.println(i = k);
}
}
运行结果如下:
true
30
另外,== 和!= 两种运算也可对引用数据类型进行,其他四种则不行。
逻辑运算符
包含四种:且& ,或| ,非! 及异或^ 。其中 “且” 和 “或” 建议写成短路形式:&& 和|| 。
逻辑运算符用以判断两端的命题的成立关系的,所以它的两端结果必须为布尔值。
短路运算符的特点是如果第一个条件足以使结果成立/不成立,则不会再继续进行。
public class OperatorDemo04 {
public static void main(String[] args) {
/*
* 逻辑运算符 &, |, ^, !, &&, ||
* & 有false则false
* | 有true则true
* ^ 两边相同则false,两边相异则true
* ! 变true为false,变false为true
* && 左边条件false则不继续进行
* || 左边条件true则不继续进行
*/
System.out.println(" \"&\"");
System.out.println(true && false);
System.out.println(true && false);
System.out.println(true && false);
System.out.println(true && false);
System.out.println();
System.out.println(" \"|\"");
System.out.println(true || false);
System.out.println(true || false);
System.out.println(true || false);
System.out.println(true || false);
System.out.println();
System.out.println(" \"^\"");
System.out.println(true ^ false);
System.out.println(true ^ false);
System.out.println(true ^ false);
System.out.println(true ^ false);
System.out.println();
// 单独的 ! 不太便于理解,不建议使用
System.out.println(" \"!\"");
System.out.println(false);
System.out.println(!false);
System.out.println(!!false);
}
}
运行结果如下:
"&"
false
false
false
false
"|"
true
true
true
true
"^"
true
true
true
true
"!"
false
true
false
条件运算符
条件运算符又称三元运算符,用以对关系表达式的成立与否自定义结果。
public class OperatorDemo05 {
public static void main(String[] args) {
/*
* 三元运算符:关系表达式 ? 表达式1 : 表达式2;
* 若值为true输出表达式1的值,若值为false输出表达式2的值
*/
int a = 10, b = 20;
// Math.max(a, b) == (a > b) ? a : b
System.out.println("max: " + (Math.max(a, b)));
}
}
运行结果如下:
max: 20
运算符优先级
从高到低依次为:
()
++(左),–(左),!
%,/,*
+,-
<,<=,>,>=,==,!=
&,|,^
&&,||
? :
=,*=,/=,+=,-=
(右)++,(右)–
分不清的情况下,请善用括号。
新人上路,求给意见。