运算符
运算符是一种特殊符号,用以表示数据的运算、赋值和比较等
算数运算符、赋值运算符、比较(关系)运算符、逻辑运算符、位运算符、三元运算符
算数运算符
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
+ | 正号 | + 3 | 3 |
- | 负号 | b = 4; - b | -4 |
+ | 加 | 5 +5 | 10 |
- | 减 | 6 - 4 | 2 |
* | 乘 | 3 * 4 | 12 |
/ | 除 | 5 / 5 | 1 |
% | 取模(取余) | 7 % 5 | 2 |
++ | 自增(前),先运算后取值<br />自增(后),先取值后运算 | a = 2; b = ++ a;<br />a + 2; b = a ++; | a = 3; b = 3<br />a = 3; b = 2 |
-- | 自减(前),先运算后取值<br />自减(后),先取值后运算 | a = 2; b = – a;<br />a + 2; b = a –; | a = 1; b = 1 <br />a = 1; b = 2 |
+ | 字符串连接 | “He”+“llo” | “Hello” |
class AriTest{
public staic void main(String[] args){
//取余运算结果的符号与被模数的符号相同:
int m1 = 12;
int n1 = 5;
System.out.pringtln("m1 % n1 =" + m1 % n1);
int m2 = -12;
int n2 = 5;
System.out.pringtln("m2 % n2 =" + m1 % n1);
int m3 = 12;
int n3 = -5;
System.out.pringtln("m3 % n3 =" + m1 % n1);
int m4 = -12;
int n4 = -5;
System.out.pringtln("m4 % n4 =" + m1 % n1);
//(前)++:先自增,后运算
//(后)++:先运算,后自增
int a1 = 10;
int b1 = ++a1;
System.out.println(b1);
int a2 = 10;
int b2 = a1++;
System.out.println(b2);
}
}
/*
数子153输出:
百位数:1
十位数:5
个位数;3
*/
class AirExer{
public static void main(String[] args){
int num = 153;
int bai = num / 100;
int shi = num % 100 / 10;
int ge = num % 10;
System.out.println("百位数:" + bai);
System.out.println("十位数:" + shi);
System.out.println("百位数:" + ge);
}
}
- ==取余运算结果的符号余被模数的符号相同==
- 开发中经常使用
%
判断能否被除尽的情况
赋值运算符
符号:=
- 当
=
两侧数据类型不一致时,可以使用自动类型转换或者强制类型转换原则进行处理 - 支持连续赋值
- 扩展赋值运算符:
+=
,-=
,*=
,/=
,%=
class SetValueTest{
public static void main(String[] args){
//赋值
int i1 = 10;
int j1 = 10;
//连续赋值
int i2,j2;
i2 = j2 = 10;
//自增赋值
int num1 = 10;
num1 += 2;//num1 = num1 + 2;
int num2 = 12;
num2 %= 5;//num2 = num2 % 5;
//s1 = s1 + 2;//数据类型不统一,编译失败
short s1 = 10;
s1 += 2;//不会改变变量本身的数据类型
}
}
==用赋值运算符做运算不会改变变量本身的数据类型==
比较运算符
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
== | 相等于 | 4 == 3 | false |
|= | 不等于 | 4 |= 3 | true |
< | 小于 | 4 < 3 | false |
> | 大于 | 4 > 3 | true |
<= | 小于等于 | 4 <= 3 | false |
>= | 大于等于 | 4 >= 3 | true |
- 比较运算符的结果都是
boolean
型,(true
或false
) - 比较运算符
==
不能误写成=
(赋值运算符)
逻辑运算符
&
逻辑与 |
逻辑或 !
逻辑非
&&
短路与 ||
短路或 ^_
逻辑异或
a | b | a&b | a&&b | a|b | a||b | !a | A^b |
---|---|---|---|---|---|---|---|
true | true | true | true | true | true | false | false |
true | false | false | false | true | true | false | true |
false | true | false | false | true | true | true | ture |
false | false | false | false | false | false | true | false |
//逻辑与、短路与的区别:
class LogicTest {
public static void main(string[] args){
//区分 & 与 &&
boolean b1 = false;
int num1 = 10;
if(b1 & (num1++ > 0)){
System.out.println("我在南京");
}else{
System.out.println("我在北京");
}
System.out.println("num1 =" +num1);
//
boolean b2 = false;
int num2 = 10;
if(b1 && (num2++ > 0)){
System.out.println("我在南京");
}else{
System.out.println("我在北京");
}
System.out.println("num2 =" + num2);
}
}
逻辑与、短路与的区别:
-
&
与&&
的运算结果相同 - 当符号左边为
true
时,二者都会执行符号右边的运算 - 当符号右边为
false
时,&
继续执行符号右边的运算,&&
不再执行符号右边的运算
同理,逻辑或、短路或的区别:
-
|
与||
的运算结果相同 - 当符号左边为
false
时,二者都会执行符号右边的运算 - 当符号右边为
true
时,|
继续执行符号右边的运算,||
不再执行符号右边的运算
实际开发中推荐使用&&
和||
位运算符
运算符 | 运算 | 细节 | 范例 | ||
---|---|---|---|---|---|
<< | 左移 | 空位补 0 ,被移除的高位丢弃 | 3 << 2 = 12 → 3 * 22 = 12 | ||
>> | 右移 | 最高位是 0 时,空位补 0 <br />最高位是 1 时,空位补 1 | 3 >> 1 = 1 → 3 / 21 =1 | ||
>>> | 无符号右移 | 空位补 0 | 3 >>> 1 = 1 → 3 / 21 =1 | ||
& | 与运算 | 二进制位进行& 运算,只有1&1 时结果为1,否则为0 |
6 & 3 = 2 | ||
| | 或运算 | 二进制位进行` |
运算,只有 0 |
0`时结果为0,否则为1 | 6 | 3 = 7 |
^ | 异或运算 | 相同二进制位进行^ 运算,结果是0<br />不同二进制位进行^ 运算,结果是1 |
6 ^ 3 = 5 | ||
~ | 取反运算 | 正数取反,各二进制码按补码各位取反<br />负数取反,各二进制码按补码各位取反 | ~6 = -7 |
m = k ^ n =(m ^ n)^ n
三元运算符
(条件表达式)?
表达式1 : 表达式2
条件表达式的结果为
boolean
类型-
根据条件表达式真或假,决定执行表达式 1,还是表达式 2
如果表达式为 true,则执行表达式 1
如果表达式为 false,则执行表达式 2
表达式 1 与表达式 2 要求是一致的
三元运算符可以嵌套使用
-
凡可以使用三元运算符的地方都可以改写为 if — else,反之则不行
优先使用三元运算符(简洁、执行效率高)
class SanYuanTest{
public static void(Strings[] args){
int m = 12;
int n = 5;
int max =( m > n ) ? m : n;
System.out.println(max);
//********************************
n = 2;
String maxStr = (m > n)?"m大" : ((m == n)?"m和n相等" : ”n大);
System.out.println(maxStr);
//******************************
//获取三个数中的最大值
int n1 = 12;
int n2 = 30;
int n3 = -43;
int max1 = (n1 > n2)? n1 : n2;
int max2 = (max1 >n3)? max1 : n3;
System.out.println(max2);
}
}
运算符的优先级
运算符有不同的优先级(运算顺序)
只有单目运算符、三元运算符、复制运算符是从右向左运算的
实际开发中更常用()
提升优先级,注重代码可读性