一、基本运算符
在之前使用过这样的语法:
int num = 10;
此类的方式称为赋值运算符,“=”是实现赋值运算使用的。
那么进行数学计算时所使用的四则运算也属于运算符的定义范畴。
运算符的优先级
优先级
运算符
类
综合性
1
()
括号
由左至右
1
[ ]
方括号
由左至右
2
! 、+(正) 、-(负)
一元
由右至左
2
-
位逻辑
由右至左
2
++、--
递增、递减
由右至左
3
*、/、%
算术
由左至右
4
+、-
算术
由左至右
5
<<、>>
位左移、右移
由左至右
6
>、>=、<、<=
关系
由左至右
7
==、!=
关系
由左至右
8
&(AND)
位逻辑
由左至右
9
^(XOR)
位逻辑
由左至右
10
|(OR)
位逻辑
由左至右
11
&&
逻辑
由左至右
12
||
逻辑
由左至右
13
?
三目
由右至左
14
=
赋值
由右至左
但是对于所有的运算符,千万要记住,不要编写过于复杂的操作。
范例:观察一种神奇的代码
public class TestDemo { public static void main(String args[]) { int numA = 10; int numB = 20; int result = numA + numB - --numB + numA; System.out.println(result); } }
编写代码应使用简单的代码,如果真的是复杂的代码,建议使用“()”改变优先级。
在开发之中常用的运算符:四则运算、逻辑运算、三目运算、位运算。
对于四则运算基本的组成:+、-、*、/、%
范例:四则运算
public class TestDemo { public static void main(String args[]) { int numA = 10; int numB = 20; System.out.println("加法计算:" + (numA + numB)); System.out.println("减法计算:" + (numA - numB)); System.out.println("乘法计算:" + (numA * numB)); System.out.println("除法计算:" + (numA / (double) numB)); } }
范例:求模计算
public class TestDemo { public static void main(String args[]) { int numA = 10; int numB = 3; System.out.println(numA % numB); } }
可利用求模运算判断数字的奇偶性。
public class TestDemo {
public static void main(String args[]) {
int numA = 10;
int numB = 3;
System.out.println(numA % 2);
System.out.println(numB % 2);
}
}
运算符中又提供了一些简化运算符:*=、/=、+=、-=、%=。
public class TestDemo {
public static void main(String args[]) {
int num = 10;
num *= 2;// 等价:num = num*2;
System.out.println(num);
}
}
自增运算符“++”,自减运算符“--”:根据位置不同,执行的顺序也不同。
- ++变量、--变量:先改变,后计算;
- 变量++、变量--:先计算,后改变。
范例:观察自增(写在前面)
public class TestDemo { public static void main(String args[]) { int numA = 10; int numB = 20; int result = ++numA + numB; System.out.println("numA=" + numA); System.out.println("result=" + result); } } numA=11 result=31
范例:观察自增(写在后面)
public class TestDemo { public static void main(String args[]) { int numA = 10; int numB = 20; int result = numA++ + numB; System.out.println("numA=" + numA); System.out.println("result=" + result); } } numA=11 result=30
建议只操作其实现自增或自减的操作,可以有效的避免计算的复杂度。
以后如果使用此类操作,往往也只会使用“numA++”。
public class TestDemo {
public static void main(String args[]) {
int numA = 10;
numA++;
System.out.println("numA=" + numA);
}
}
二、三目运算符
三目是一种赋值运算的形式,执行三目的时候可以以一个布尔表达式的结果进行赋值,基本的语法结构如下:
数据类型 变量 = 布尔表达式 ? 满足此表达式时设置的内容 : 不满足此表达式时设置的内容
范例:实现赋值
public class TestDemo { public static void main(String args[]) { int numA = 10; int numB = 20; int max = numA > numB ? numA : numB; System.out.println(max); } }
利用三目可以节约一些判断代码。
三、逻辑运算符
对于逻辑运算主要就是:与(&、&&)、或(|、||)、非(!)三种计算。
范例:非就是针对一个布尔结果进行求反
public class TestDemo { public static void main(String args[]) { boolean flag = true; System.out.println(!flag); } }
如果现在是多个布尔表达式要想进行连接,只能使用与和或两个操作。
1、与操作:
当多个条件进行连接的使用,那么只有这多个条件都满足了, 最终结果才是true。
范例:观察普通与(&)
public class TestDemo { public static void main(String args[]) { if ((2 == 1) & (10 / 1 == 0)) { System.out.println("Hello World!"); } } }
第一个执行完之后结果是false,后面的判断代码依旧会执行。
范例:使用短路与(&&)
public class TestDemo { public static void main(String args[]) { if ((2 == 1) && (10 / 0 == 0)) { System.out.println("Hello World!"); } } }
如果前面的条件返回false,后面的判断代码不会再执行。
2、或操作:
或的操作要求所有的判断条件只要有一个满足即可。
范例:观察普通或(|)
public class TestDemo { public static void main(String args[]) { if ((1 == 1) |(10 / 0 == 0)) { System.out.println("Hello World!"); } } }
使用普通或所有的判断条件都执行了。即使遇见一个判断条件结果为true,依旧会继续执行。
范例:观察短路或(||)
public class TestDemo { public static void main(String args[]) { if ((1 == 1) ||(10 / 0 == 0)) { System.out.println("Hello World!"); } } }
只要遇见一个判断条件结果为true,后面的判断条件将不再执行。
四、位运算符
数学计算都使用的是十进制,而Java本身的运算支持二进制、八进制和十六进制。本节重点观察二进制。
如果想把十进制变为二进制,采用的方式是:除二、取余、倒序。
25 二进制:11001
/ 2
12······ 1
/ 2
6 ······ 0
/ 2
3······ 0
/ 2
1······ 1
/ 2
0······ 1
位运算主要是进行二进制数据操作的,可以使用:&、|、>>、<<、^、~。
范例:实现位与操作
public class TestDemo { public static void main(String args[]) { int numA = 9; int numB = 11; System.out.println(numA & numB); } }
9的二进制:00000000 00000000 00000000 00001001
11的二进制:00000000 00000000 00000000 00001011
&的结果:00000000 00000000 00000000 00001001 即:9
范例:实现位或操作
public class TestDemo { public static void main(String args[]) { int numA = 9; int numB = 11; System.out.println(numA | numB); } }
9的二进制:00000000 00000000 00000000 00001001
11的二进制:00000000 00000000 00000000 00001011
| 的结果:00000000 00000000 00000000 00001011 即:11
范例:移位操作
public class TestDemo { public static void main(String args[]) { int num = 2; int result = num << 2;// 向左移位 System.out.println(num);// 原始数据不变 System.out.println(result);// 相当于2*2*2 } }
2的二进制:00000000 00000000 00000000 00000010
左移位之后:00000000 00000000 00000000 00001000
扩展题目:请解释“&”和“&&”的区别?“|”和“||”的区别?
逻辑运算:
- &:所有的判断条件都要判断
- &&:如果前面的结果返回了false,后面不再判断,最终结果为false;
- |:所有的判断条件都要判断
- ||:如果前面的结果返回了true,后面不再判断,最终结果为true;
位运算:
位与运算(&)、位或运算(|)
其中“&&”和“||”不能应用在位运算上