目录
程序运算符是有许多语句组成的,而语句的基本单位就是表达式与运算符。Java 的运算符可分为 : 算术运算符、关系运算符、逻辑运算符和位运算符。
一、算术运算符
算术运算符主要用于 Java 做运算操作使用。
算术运算符 | 意义 |
+ | 加法 |
- | 减法 |
* | 乘法 |
/ | 除法 |
% | 取余 |
++ | 自增 |
-- | 自减 |
1.1、 加法运算 “ + ”
将加法运算符 “ + ” 的前后两个数相加
System.out.println("6 + 8 = " + 6 + 8); //直接输出表达式的值
1 .2、减法运算 “ - ”
int num = 6 - 3; // 将6-3运算之后赋值给num保存
1 .3、乘法运算 “ * ”
int num = 5 * 5; // 将 5 * 5 运算后的值赋值给num保存
1 .4、除法运算 “ / ”
int num = 10 / 5; // 将 10 / 5 运算后的值赋值给num保存
使用除法运算时,若是运算的结果不能整除时,输出的结果与实际的会有差异,因为整形的变量无法保存小数点后面的数据所致。
示例
public class Test1 {
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = 13;
int d = 4;
System.out.println("(b / a)能整除情况 = " + b / a);
System.out.println("(c / d)不能整除情况 = " + c / d);
System.out.println("(c / d)不能整除,进行强制类型转换 = " + (float)c / d);
}
}
控制台显示
(b / a)能整除情况 = 2
(c / d)不能整除情况 = 3
(c / d)不能整除,进行强制类型转换 = 3.25
1 .5、自增运算 “ ++ ”
public class Test2 {
public static void main(String[] args) {
int a = 10; // 把 10 赋值给变量 a
System.out.println("a++ ="+(a++));// 先执行完a++后 a的值才会加1 a=10
System.out.println("++a ="+(++a));// 先执行完++a前 a先加1 a=12
}
}
1 .6、自减运算 “ -- ”
public class Test3 {
public static void main(String[] args) {
int a = 10; // 把 10 赋值给变量 a
System.out.println("a-- ="+(a--));// 先执行完a--后 a的值才会减1 a=10
System.out.println("--a ="+(--a));// 先执行完--a前 a先减1 a=8
}
}
二、关系运算符
关系运算符去判断表达式是否成立时,会产生一个响应值 true 或者 false 。
关系运算符 | 意义 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
== | 等于 |
!= | 不等于 |
示例
public class Test4 {
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println("a > b = " + (a > b)); // false
System.out.println("a < b = " + (a < b)); // true
System.out.println("b >= a = " + (b >= a)); //true
System.out.println("b <= a = " + (b <= a)); // false
System.out.println("a == b = " + (a == b)); // false
System.out.println("a != b = " + (a != b)); //true
}
}
三、逻辑运算符
逻辑运算符 | 意义 |
&& | and ,与 |
|| | or ,或 |
! | 非 |
public class Test5 {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
System.out.println("a && b = " + (a&&b)); // false
System.out.println("a || b = " + (a||b) ); // true
System.out.println("!(a && b) = " + !(a && b));// true
}
}
四、位运算符
Java定义了位运算符,应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等类型。
位运算符作用在所有的位上,并且按位运算。假设a = 60,b = 13;它们的二进制格式表示将如下:
A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A | B = 0011 1101
A ^ B = 0011 0001
~A= 1100 0011
操作符 | 描述 | 例子 |
& | 如果相对应位都是1,则结果为1,否则为0 | (A&B),得到12,即0000 1100 |
| | 如果相对应位都是 0,则结果为 0,否则为 1 | (A | B)得到61,即 0011 1101 |
^ | 如果相对应位值相同,则结果为0,否则为1 | (A ^ B)得到49,即 0011 0001 |
〜 | 按位取反运算符翻转操作数的每一位,即0变成1,1变成0。 | (〜A)得到-61,即1100 0011 |
<< | 按位左移运算符。左操作数按位左移右操作数指定的位数。 | A << 2得到240,即 1111 0000 |
>> | 按位右移运算符。左操作数按位右移右操作数指定的位数。 | A >> 2得到15即 1111 |
>>> | 按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。 | A>>>2得到15即0000 1111 |
示例
public class Test6 {
public static void main(String[] args) {
int a = 60; /* 60 = 0011 1100 */
int b = 13; /* 13 = 0000 1101 */
int c = 0;
c = a & b; /* 12 = 0000 1100 */
System.out.println("a & b = " + c );
c = a | b; /* 61 = 0011 1101 */
System.out.println("a | b = " + c );
c = a ^ b; /* 49 = 0011 0001 */
System.out.println("a ^ b = " + c );
c = ~a; /*-61 = 1100 0011 */
System.out.println("~a = " + c );
c = a << 2; /* 240 = 1111 0000 */
System.out.println("a << 2 = " + c );
c = a >> 2; /* 15 = 1111 */
System.out.println("a >> 2 = " + c );
c = a >>> 2; /* 15 = 0000 1111 */
System.out.println("a >>> 2 = " + c );
}
}
控制台显示
a & b = 12
a | b = 61
a ^ b = 49
~a = -61
a << 2 = 240
a >> 2 = 15
a >>> 2 = 15
五、运算符优先级
当多个运算符出现在一个表达式中,谁先谁后呢?这就涉及到运算符的优先级别的问题。在一个多运算符的表达式中,运算符优先级不同会导致最后得出的结果差别甚大。
下表中具有最高优先级的运算符在的表的最上面,最低优先级的在表的底部。
类别 | 操作符 | 关联性 |
---|---|---|
后缀 | () [] . (点操作符) | 左到右 |
一元 | expr++ expr-- | 从左到右 |
一元 | ++expr --expr + - ~ ! | 从右到左 |
乘性 | * /% | 左到右 |
加性 | + - | 左到右 |
移位 | >> >>> << | 左到右 |
关系 | > >= < <= | 左到右 |
相等 | == != | 左到右 |
按位与 | & | 左到右 |
按位异或 | ^ | 左到右 |
按位或 | | | 左到右 |
逻辑与 | && | 左到右 |
逻辑或 | | | | 左到右 |
条件 | ?: | 从右到左 |
赋值 | = + = - = * = / =%= >> = << =&= ^ = | = | 从右到左 |
逗号 | , | 左到右 |