运算符
Java中的语句有很多形式,表达式就是其中一种,表达式由操作数与运算符所组成。
操作数可以是常量,变量,运算符就是就是在执行的运算表达式中的符号,具体可分为以下6类:
- 算数运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 三元运算符
- 算数优先级
算数运算符
算术运算符是对数值类型的变量进行运算的,它们的作用和在数学中的作用一样
运算符 | 描述 | 例子 | 结果 |
+ | 加法/正号 | 2 + 8 | 10 |
- | 减法/负号 | 2 - 8 | -6 |
* | 乘法 | 2 * 8 | 16 |
/ | 除法 | 8 / 2 | 4 |
% | 取余(取模) | 8 % 2 | 0 |
++ | 自增(前):先运算后赋值 | a = 1;b=++a; | a=2;b=2; |
++ | (后)自增:先赋值后运算 | a = 1;b=a++; | a=2;b=1; |
– | 自减(前):先运算后赋值 | a = 1;b=–a; | a=0;b=0; |
– | (后)自减:先赋值后运算 | a = 1;b=a–; | a=0;b=1; |
public class ArithmeticOperation {
public static void main(String[] args) {
System.out.println(5 / 2); //输出为2
//不可以两个int变量直接做除法,会丢失精度
System.out.println(5.0 / 2); //输出为2.5
// 将其中任意一个操作数转换为浮点数,结果为double型,Java的浮点型常量默认为double型
System.out.println(5%2);//输出为1,余数为1
System.out.println(2%5);//输出为2,当左操作数小于右操作数结果为左操作数
System.out.println(5%5);//输出为0,两操作数相等时结果为零
System.out.println(-2%5);//输出为-2,有负数看左操作数
System.out.println(2%-5);//输出为 2,
int i = 5;
int j = 0;
j = i++;
System.out.println("i=" + i + "j=" + j);//输出为i=6 j=5
//j = i++; 等价 j = i; i = i + 1;
j = ++i;
System.out.println("i=" + i + "j=" + j);//输出为i=7 j=7
// j = ++i; 等价 i = i + 1; j = i;
}
}
使用注意:
设a,b两个变量,取余的运算规则则是
*a%b=a- a/b b
关系运算符
关系运算符的结果都是 boolean 型,要么true要么false
关系表达式 经常用在 if 结构的条件中或循环结构的条件中
public class RelationalOperation {
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println(a == b );//输出为false
System.out.println(a != b );//输出为true
System.out.println(a > b );//输出为false
System.out.println(a < b );//输出为true
System.out.println(b >= a );//输出为true
System.out.println(b <= a );//输出为flase
}
}
位运算符
public class BitOperation {
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 );
}
}
逻辑运算符
public class LogicOperation{
public static void main(String[] args) {
System.out.println(1 > 0 && 2 > 0);//输出为true
//两个都为真时,返回true
System.out.println(1 > 0 || 2 > 5);//输出为true
//有一个为真返回true
System.out.println( !(1 > 0));//输出为false
//true的相反false,返回false
}
}
public class LogicOperation{
public static void main(String[] args) {
System.out.println(1 < 0 && 2 > 0);//输出false
//1<0 false “&&”造成短路2>0 不做运算
System.out.println(1 > 0 || 2 > 5);//输出为true
//1>0 true "||"造成短路 2>5 不做运算
}
}
使用细节:
- ‘’&&","||"属于短路逻辑运算符。对于逻辑运算符“&&”,要求左右两个表达式都为true时才返回true,如果左边第一个表达式为false时,它立刻就返回false,就像短路了一样立刻返回。
- 对于逻辑运算符“||”,要求左右两个表达式有一个为true时就返回true,如果左边第一个表达式为true时,它立刻就返回true。
- 逻辑与运算符:& 在用于逻辑与时,和 && 的区别是不具有短路性。所在通常使用逻辑与运算符都会使用 &&,而 & 更多的适用于位运算。
三元运算符
操作语法:
条件表达式 ? 表达式 1: 表达式2;
三元运算符也称三目运算符有三个操作数。操作流程如下:
首先判断条件,如果条件满足,就会赋予一个变量表达式1(冒号:之前的),不满足会赋予变量另外的一个表达式(冒号之后的)。
public class TernaryOperation{
public static void main(String[] args) {
int x = 10;
int y = 20;
int c = x > y ? x : y;
//如果x的值大于y的值,就将x的值赋给c,否则将y的值赋给c;
//10<20 为false,所以将表达式2的值赋给c
System.out.println(c);//20
}
}
三元运算符本质上就是if—else语句的简写形式,以上的操作完全可以转换成if—else语句;
public class TernaryOperation{
public static void main(String[] args) {
int x = 10;
int y = 20;
int c;
if(x>y)
c=x;
else
c=y;
System.out.println(c);
}
}
算数优先级
运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序,数字越小表示优先级越高。
结合性:当使用同一优先级的运算符时,结合性决定谁先被处理。