运算符
运算符的核心用途就是执行数学运算。计算出其左右连接的数学数字作为结果返回。
类别:
算术运算符 关系运算符 位运算符 逻辑运算符 赋值运算符 其他运算符
算术运算符
+ - * / %
:其中任何整数模2不是0就是1,所以只要改变被模数就可以实现开关运算。+
:字符串的连接符。++, --
:自增,自减
//程序功能:快速理解Java的算术运算符
public class OperatorDemo {
public static void main(String[] args) {
// 定义两个变量
int a = 3;
int b = 4;
System.out.println(a++);
System.out.println(b--);
System.out.println(a + b);
System.out.println(a - b);
System.out.println(a * b);
System.out.println(a / b); //输出0
// 整数相除只能得到整数,要想得到小数,就必须有浮点数参与运算
System.out.println(3 / 4.0);
System.out.println(3.0 / 4);
}
}
赋值运算符。
=, +=, -=, *=, /=, %=,
a+=b
: 含义是a=a+b
;a-=b
: 含义是a=a-b
;a*=b
: 含义是a=a*b
;a/=b
: 含义是a=a/b
;a%=b
: 含义是a=a%b
;
//程序功能:字符串的“加法”
public class Main {
public static void main(String[] args) {
// 整数加法
int a = 10;
int b = 20;
System.out.println(a + b);
System.out.println("------------------");
// 字符参与加法操作
char c = '0';
char c2 = 'a';
System.out.println(c + a); //字符与数字运算,解析为ASCII,输出:75
System.out.println(a + c2);
System.out.println("------------------");
// 字符串参与加法操作
System.out.println("hello" + a);
System.out.println("hello" + a + b); // "hello"+10,然后再和b进行拼接
System.out.println(a + b + "hello");
}
}
比较运算符
\> < >= <= == !=
该运算符的特点是: 运算完的结果,要么是true,要么是false。
class Main {
public static void main(String[] args) {
// 注意:千万不要把==写成=
int x = 3;
int y = 4;
System.out.println(x == y); //输出:false
System.out.println(x = y);// 把y赋值给x,把x的值输出;输出4
boolean bb = (x == y); //编译通过
//boolean cc = (x = y); //编译出错
int cc = (x = y); //编译通过
}
}
逻辑运算符
& | ^ ! && ||
特点: 逻辑运算符除了“!”外都是用于连接两个boolean类型表达式。
a) &
: 逻辑与,只有两边都为true结果是true。否则就是false。
b) |
: 逻辑或,只要两边都为false结果是false,否则就是true 。
c) ^
: 逻辑异或,两边结果一样,就为false。两边结果不一样,就为true。
& 和 &&区别:
- & :无论左边结果是什么,右边都参与运算。
- &&: 短路与,如果左边为false,那么右边不参与运算。【有假就终止】
| 和|| 区别:
- |:两边都运算。
- ||:短路或,如果左边为true,那么右边不参与运算。【有真就终止】
class Main {
public static void main(String[] args) {
int x = 10;
int y = 20;
System.out.println((x++ > 10) & (y++ > 20)); // false & false
System.out.println("x:" + x);
System.out.println("y:" + y);
// false
// x:11
// y:21
// 两个数都加了1,表明&两边都执行了
x = 10;
y = 20;
System.out.println((x++ > 10) && (y++ > 20)); // false && false
System.out.println("x:" + x);
System.out.println("y:" + y);
// false
// x:11
// y:20
// x加了1,y没加1,表明&&的右边没有执行
}
}
位运算符
功能: 用于操作二进制位的运算符。
& | ^ << >> >>>(无符号右移)
示例:对两个变量的数据进行互换。不需要第三方变量。
int a = 3,b = 5; -->b = 3,a = 5;
a = a + b; a = 8;
b = a - b; b = 3;
a = a - b; a = 5;
a = a ^ b; //
b = a ^ b; //b = a ^ b ^ b = a
a = a ^ b; //a = a ^ b ^ a = b;
三目运算符
格式: 关系表达式?表达式1:表达式2
//比较两个整数是否相同
public class OperatorTest {
public static void main(String[] args) {
// 定义两个int类型的变量
int a = 10;
int b = 20;
boolean flag = (a == b) ? true : false;
// boolean flag = (a == b); 简单写法
System.out.println(flag);
}
}
//获取三个整数中的最大值
public class OperatorTest2 {
public static void main(String[] args) {
// 定义三个int类型的变量
int a = 10;
int b = 30;
int c = 20;
// 先比较两个整数的大值
int temp = ((a > b) ? a : b);
int max = ((temp > c) ? temp : c);
System.out.println("max:" + max);
}
}
运算符优先级
由高至底:
- 后缀:
() [] . (点操作符)
左到右 - 一元:
+ + - !〜
从右到左 - 乘性:
* /%
左到右 - 加性:
+ -
左到右 - 移位:
>> >>> <<
左到右 - 关系:
>> = << =
左到右 - 相等:
== !=
左到右 - 按位与:
&
左到右 - 按位异或:
^
左到右 - 按位或:
|
左到右 - 逻辑与:
&&
左到右 - 逻辑或:
|
左到右 - 条件:
?:
从右到左 - 赋值:
= + = - = * = / =%= >> = << =&= ^ = | =
从右到左 - 逗号:
,
左到右