(一)算数运算符

算术运算符也称基本运算符,为加减乘除模(+ - * / %)。

“+”:

int sum1 = 10 + 20; // 输出sum1 = 30

除了常见的加法运算,加号也可用于字符串拼接。

String str1 = 123 + "123"; // 输出字符串123123

“-”、“*”:

正常运算,没啥特殊的。

“/”:

System.out.println(5/2);//2

System.out.println((float)5/2);//2.5

System.out.println(5/(float)2);//2.5

System.out.println((float)(5/2));//2.0

5/2,int型/int型,整数除法会截断小数,答案是2;

(float)5/2,int型的2自动提升为float型,答案是2.5;

5/(float)2同上;

(float)(5/2),5/2为int型的2,2强制转换为float型,答案是2.0

“%”:取余,相当于数学运算中除法的余数。

System.out.println(10 % 3);//1

System.out.println(10 % -3);//1

System.out.println(-10 % 3);//-1

System.out.println(-10 % -3);//-1

System.out.println(11.5 % 2);//1.5

注意:

①基本运算符都是二元运算符,使用时必须保证运算符左右都有操作数。

②除法和取模运算,右操作数不能为0。

③两侧操作数类型不一致时,向范围大的类型提升。

(二)自增/自减运算符

“++”、“--”:

分为前置++(前置--)和后置++(后置--)。

就“++”举例:

1.单独使用时,前置++和后置++没有区别。

int a = 10;

a++;

System.out.println(a);//a = 11

int a = 10;

++a;

System.out.println(a);//a = 11

2.混合使用时,前置++:先+1再使用;后置++:先使用,再+1

int a = 1;

int b = a++;

System.out.println(b);//注意:后置++是先使用变量原来值,表示式结束时给变量+1,故输出b=1

System.out.println(a); // 输出2

int c = ++a;

System.out.println(c); // 注意:前置++是先给变量+1,然后使用变量中的值,因此输出3

System.out.println(a); // 输出3

可以打断点在控制台调试观察a的值。

(三)赋值运算符

1.简单赋值:=

2.复合赋值:-=、+=、*=、/=、%=

int a = 1;

a += 2; // 相当于 a = a + 2

System.out.println(a); // 输出3

a -= 1; // 相当于 a = a - 1

System.out.println(a); // 输出2

a *= 3; // 相当于 a = a * 3

System.out.println(a); // 输出6

a /= 3; // 相当于 a = a / 3

System.out.println(a); // 输出2

a %= 3; // 相当于 a = a % 2

System.out.println(a); // 输出2

注意:

①赋值运算符操作完成后,会将结果赋值给左操作数。

②赋值运算符会帮助用户进行强制类型转换。

例:

long d = 100;

int c = 9;

c += d;//等价于c = (int)(c + d);

System.out.println(c);//109

(四)关系运算符

主要有六个:==、!=、<、>、<=、>=,计算结果是true或者false。

int a = 10;

int b = 20;

System.out.println(a == b); // false

System.out.println(a != b); // true

System.out.println(a < b); // true

System.out.println(a > b); // false

System.out.println(a <= b); // true

System.out.println(a >= b); // false

注意:

①在Java中,= 表示赋值,与数学中含义区分。

②在Java中,== 表示相等。

③在Java中,当需要多次判断时,不能连写。比如:2

int x = 5;

System.out.println(2

原因是,当编译器编译到2

(五)逻辑运算符

基本逻辑运算符:(运算结果都是boolean类型)

1. &&(逻辑与 / 短路与):

两个表达式结果都为真,结果才为真;只要有一个是假,结果便为假。

布尔表达式1布尔表达式2结果真真真真假假假真假假假假

语法规则:

①形式为:布尔表达式1 && 布尔表达式2

②左右表达式结果必须是boolean类型。

③符合短路求值的规则:如果左侧表达式值为false,结果一定是false,右侧表达式不需计算。

例:

int a = 1;

int b = 2;

System.out.println(a == 1 && b == 2); // 左真 且 右真 则结果为真

System.out.println(a == 1 && b > 100); // 左真 但 右假 则结果为假

System.out.println(a > 100 && b == 2); // 左假(,但右为真) 则结果为假

System.out.println(a > 100 && b > 100); // 左假(,且右为假) 则结果为假

2. | | (逻辑或 / 短路或):

两个表达式只要有一个为真,结果就为真。

布尔表达式1布尔表达式2结果真真真真假真假真真假假假

语法规则:

①形式为:布尔表达式1 || 布尔表达式2

②左右表达式结果必须是boolean类型。

③符合短路求值的规则:如果左侧表达式值为true,结果一定是true,右侧表达式不需计算。

例:

int a = 1;

int b = 2;

System.out.println(a == 1 || b == 2); // 左真 且 右真 则结果为真

System.out.println(a == 1 || b > 100); // 左真 但 右假 则结果为真

System.out.println(a > 100 || b == 2); // 左为假(,但右为真) 则结果为真

System.out.println(a > 100 || b > 100); // 左为假(,且右为假) 则结果为假

3. !(逻辑非 / 非):

真变假,假变真。

布尔表达式真假假真

语法规则:

①形式为:!布尔表达式

②结果是boolean类型

例:

int a = 1;

System.out.println(!(a == 1)); // a == 1 为true,取非就是false

System.out.println(!(a != 1)); // a != 1 为false,取非就是true

非短路版本:

&(按位与)和 |(按位或)当表达式结果为boolean类型时,也表示逻辑运算,但无短路特性。

(六)位运算符

位运算符主要有四个:&、|、~、^。除了~是一元运算符,其它的都是二元运算符。

位操作表示按二进制位运算。按位运算就是按照二进制位的每一位依次进行计算。

1. &(按位与):

如果两个二进制位都是1,则结果为1,否则为0。(全1则1)

例:

int a = 10;//0000 1010

int b = 20;//0001 0100

System.out.println(a & b);//0000 0000

进行按位与运算,首先将10,20转换成二进制形式,分别为00001010,00010100,按位相与得出结果为00000000,故控制台输出结果为0。

2.|(按位或):

如果两个二进制位都是0,则结果为0,否则为1。(全0则0,有1则1)

运算方式与按位与类似。例:

int a = 10;//0000 1010

int b = 20;//0001 0100

System.out.println(a | b);//0001 1110

注意:

当&、|的操作数为整数,即int型、short型、long型、byte型,表示按位运算,当操作数为boolean型时,表示逻辑运算。

3. ~(按位取反):

如果该位为0,则取反为1,如果该位为1,则取反为0。

4. ^(按位异或):

如果两个数字的二进制位相同,则结果为0,不同则结果为1。(相同为0,不同为1)

(七)三元运算符

三元运算符也叫条件运算符,Java中只有一个:

表达式1 ?表达式2 :表达式3

意为:

当 表达式1 的值为 true 时, 整个表达式的值为 表达式2 的值; 当 表达式1 的值为 false 时, 整个表达式的值为 表达式3 的值。

博主碎碎念:

博主本人的记忆方式是偏口语化的:

“表达式1为真吗?真就返回表达式2的值,假就返回表达式3的值。”

例如:

// 求两个整数的最大值

int a = 10;

int b = 20;

int max = a > b ? a : b;

a>b吗?大于就返回a,不大于就返回b

) 注意:

①三元运算符是条件判断语句的简化写法。

②表达式不能单独存在,其产生的结果必须要被使用。

例如:

int a = 10;

int b = 20;

a > b? a : b; // 值没有使用,会报错

(八)优先级

运算符之间存在优先级,但无需特别记忆,在可能存在计算顺序歧义的代码部分直接加括号。