前言
对常量和变量进行操作的符号称为运算符
常用运算符:
- 算术运算符
- 赋值运算符
- 比较运算符
- 逻辑运算符
- 三元运算符
一、算数运算符
用来四则运算的符号,和小学学习的加减乘除无异,所以就不多说加减乘除的运算。
注意:一定要注意运算符的优先级
自增和自减
自增:++,递增操作符,使变量值增加1,有前置和后置之分,只能操作变量。
自减:-- ,递减操作符,使变量值减去1,有前置和后置之分,只能操作变量。
自增和自减具体操作是一样的,仅仅是一个是加1,一个是减1而已,现在单讲++。
如:
代码 result ++和 ++result,结果都是result变量的值加1。
唯一的区别就是:
-
前置(++result): 表示对result加1之后的结果进行运算
-
后置(result++): 表示对result变量加1之前的值(原始值)进行运算。
比较权威的解释:
-
++a表示取a的地址,增加它的内容,然后把值放在寄存器中;
-
a++表示取a的地址,把它的值装入寄存器,然后增加内存中的a的值;
如果不理解什么是寄存器,简单记住,都可以表示当前变量自身加1,区别是:
-
前置++:先增加后使用
-
后置++:先使用后增加
二、赋值运算符
public class AssigningOperatorDemo {
public static void main(String[] args) {
// 把常量17赋值给int类型的变量a
int a = 17;
System.out.println("a=" + a);
// += 把左边和右边的数据进行运算,最后赋值左边变量
a += 10;// 相当于a = a + 10
System.out.println("a=" + a);
short s = 5;
s += 2; //底层相当于 s = (short) (s + 2)
System.out.println("s=" + s);
}
}
三、比较运算符
用于比较变量或常量、表达式之间的大小关系,其结果是boolean类型(要么为true,要么为false)。
其操作格式为 :
boolean result = 表达式A 比较运算符 表达式B;
注意:>=符号,表示大于或者等于。
public class ComparisonOperatorDemo {
public static void main(String[] args) {
//直接操作常量
System.out.println(10 > 5);//true
System.out.println(10 >= 5);//true
System.out.println(10 >= 10);//true
System.out.println(10 < 5);//false
System.out.println(10 <= 5);//false
System.out.println(10 <= 10);//true
System.out.println(10 == 10);//true
System.out.println(10 != 10);//false
//使用变量操作
int a = 10;
int b = 5;
boolean result = a > b;
System.out.println(result);//true
}
}
四、三元运算符
三元运算符,表示有三个元素参与的表达式,所以又称为三目运算符,其语义表示if-else(如果什么情况就做什么,否则做什么)。 如果…那么…否则…
语法格式:
数据类型 变量 = boolean表达式 ? 结果A : 结果B;
boolean表达式结果:
-
为true,则三元运算符的结果是结果A;
-
为false,则三元运算符的结果是结果B;
注:
-
三元运算符必须定义变量接受运算的结果,否则报错
-
三元运算符结果的类型由结果A和结果B来决定的,结果A和结果B的类型是相同的。(因为三云运算的结果需要一个变量来接受,如果两个结果的类型不一样,就没法定义这个变量的类型)
// 判断一个数99是不是偶数
public class TernaryOperatorDemo1{
public static void main(String[] args) {
int a = 99;
String result = a % 2 == 0 ? "偶数" : "奇数";
System.out.println(result); // 奇数
}
}
// 求99和20两个数中的最大值
public class TernaryOperatorDemo2{
public static void main(String[] args) {
int a = 99;
int b = 20;
int result = a > b ? a : b;
System.out.println("最大值:"+result); // 99
}
}
五、逻辑运算符
逻辑运算符用于连接两个boolean表达式,结果也是boolean类型的。
语法格式为:
boolean result = boolean表达式A 逻辑运算符 boolean表达式B;
运算规则如下:
规律:
- 非:取反,!true则false,!false则true
- 与:有false则false
- 或:有true则true
- 异或:^ 相同则false,不同则true
& 与运算,可以理解为 "并,并且"
true & true => true
true & false => false
false & true => false
false & false => false
总结 : & 运算,只要两边的表达式有一个为false,结果就为false
&& 短路与
&& 运算,只要两边的表达式有一个为false,结果就为false,如果第一个表达式为false,后续表达式不再运算;
| 或运算,可以理解为 "或,或者"
true | true => true
true | false => true
false | true => true
false | false => false
总结 : | 运算,只要两边的表达式有一个为true,结果就为true
|| 短路或
|| 短路或运算,只要两边的表达式有一个为true,结果就为true,如果第一个表达式为true,后续表达式不再运算;
! 非运算,可以理解为 取反
!true = false
!false = true
基本使用
public class LogicalOperatorDemo1 {
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = 30;
//与操作
System.out.println((a > b) & (a > c));// false & false
System.out.println((a > b) & (a < c)); // false & true
System.out.println((a < b) & (a > c)); // true & false
System.out.println((a < b) & (a < c)); // true & true
//或操作
System.out.println((a > b) | (a > c));// false | false
System.out.println((a > b) | (a < c)); // false | true
System.out.println((a < b) | (a > c)); // true | false
System.out.println((a < b) | (a < c)); // true | true
//相反操作
System.out.println((a > b)); // false
System.out.println(!(a > b)); // !false
System.out.println(!!(a > b)); // !!false
}
}
&和&&的区别(掌握)
& :&左边表达式无论真假,&右边表达式都进行运算;
&& :如果&&左边表达式为真,&&右边表达式参与运算,否则&&右边表达式不参与运算,故称短路与。
| 和 || 的区别同理,||,左边为真,右边不参与运算。
public class Test05LogicOperator2 {
public static void main(String[] args) {
// 逻辑运算符
// 短路运算 && ||
int m = 10;
int n = 20;
// boolean r1 = false && false;
boolean r1 = (m > n) && (++m > 1);
System.out.println("r1 = " + r1);
System.out.println("m = " + m);
boolean r2 = (m > n) | (m < 1);
System.out.println("r2 = " + r2);
}
}
运算优先级
表达式的运算都是有优先级的,基本上和数学中的优先级类似,这里需要注意的是,赋值符号。
注意:赋值符号最后运算的,并且是从右向左运算的。
() 的优先级最高,赋值运算符优先级最低
赋值运算符的运算方向从右向左