算术运算符
int a=22,b=3;
操作符 | 名字 | 例子 | 描述 |
---|---|---|---|
+ | 加 | a + b | a加b的和 |
- | 减 | a - b | a减b的差 |
* | 乘 | a * b | a乘以b的积 |
/ | 除 | a / b | a除以b的商 |
% | 取余 | a % b | a除以b的余数 |
++ | 自增 | a + + | 相当于a + 1 的和 |
– | 自减 | - - a | 相当于a - 1 的差 |
注:++[–]在后先赋值[运算]再自身加1,++[–]在前先自身加1再赋值[运算]
public static void main(String[] args) {
int a=22;int b=3;
System.out.println("a+b="+(a+b)); // a+b=25
System.out.println("a-b="+(a-b)); // a-b=19
System.out.println("a*b="+(a*b)); // a*b=66
System.out.println("a/b="+(a/b)); // a/b=7
System.out.println("a%b="+(a%b)); // a%b=1
int c=a++;int d=++b;//++在后先赋值[运算]再自身加1,++在前先自身加1再赋值[运算]
System.out.println("a="+a+";c="+c+";b="+b+";d="+d); // a=23;c=22;b=4;d=4
int e=a--;int f=--b;//--在后先赋值[运算]再自身减1,--在前先自身减1再赋值[运算]
System.out.println("a="+a+";e="+e+";b="+b+";f="+f); // a=22;e=23;b=3;f=3
}
逻辑运算符
操作符 | 名字 | 描述 |
---|---|---|
| | 或 | 有条件为true,结果就是true;所有条件都为false,结果才是false |
|| | 短路或 | 有条件为true,结果就是true【符号左边结果为false才会判断符号右边的结果】;所有条件都为false,结果才是false |
& | 且 | 有条件为false,结果就是false;所有条件都为true,结果才是true |
&& | 短路且 | 有条件为false,结果就是false【符号左边结果为true才会判断符号右边的结果】;所有条件都为true,结果才是true |
^ | 非 | 所有条件同为true或同为false,结果才是false |
public static void main(String[] args) {
int a=0,b=1;
System.out.println(a+b>0|++a+b>2); // 0+1>0|1+1>2 true|false 结果为true
System.out.println(a+b>2|++a+b>2); // 1+1>2|2+1>2 false|true 结果为true
System.out.println(a+b>2|++a+b>2); // 2+1>2|3+1>2 true|true 结果为true
System.out.println(a+b>5|++a+b>5); // 3+1>5|4+1>5 false|false 结果为false
a=0;
System.out.println(a+b>0||++a+b>2); // 0+1>0|| true|| 结果为true
System.out.println(a+b>2||++a+b>2); // 0+1>2||1+1>2 false||false 结果为false
System.out.println(a+b>2||++a+b>2); // 1+1>2||2+1>2 false||true 结果为true
System.out.println(a+b>5||++a+b>5); // 2+1>5||3+1>5 false||false 结果为false
a=0;
System.out.println(a+b>0 & ++a+b>2);// 0+1>0 & 1+1>2 true & false 结果为false
System.out.println(a+b>2 & ++a+b>2);// 1+1>2 & 2+1>2 false & true 结果为false
System.out.println(a+b>2 & ++a+b>2);// 2+1>2 & 3+1>2 true & true 结果为true
System.out.println(a+b>5 & ++a+b>5);// 3+1>5 & 4+1>5 false & false 结果为false
a=0;
System.out.println(a+b>0 && ++a+b>2);// 0+1>0 && 1+1>2 true && false 结果为false
System.out.println(a+b>2 && ++a+b>2);// 1+1>2 && false && 结果为false
a=3;
System.out.println(a+b>2 && ++a+b>2);// 3+1>2 && 4+1>2 true && true 结果为true
System.out.println(a+b>5 && ++a+b>5);// 4+1>5 && false && 结果为false
a=0;
System.out.println(a+b>0 ^ ++a+b>2);// 0+1>0 ^ 1+1>2 true ^ false 结果为true
System.out.println(a+b>2 ^ ++a+b>2);// 1+1>2 ^ 2+1>2 false ^ true 结果为true
System.out.println(a+b>2 ^ ++a+b>2);// 2+1>2 ^ 3+1>2 true ^ true 结果为false
System.out.println(a+b>5 ^ ++a+b>5);// 3+1>5 ^ 4+1>5 false ^ false 结果为false
}
位移运算符
操作符 | 描述 |
---|---|
<< | 左移,将运算符左边的操作数向左移动,低位补0 |
>> | 有符号右移,将运算符左边的操作数向右移动,如符号为正,高位插入0;若符号为负,高位插入1 |
>>> | 无符号右移,将运算符左边的操作数向右移动,无论正负,都在高位插入0 |
注:
- 位移运算符操作的运算对象也是二进制的“位”
- 位移运算符只用来处理整数类型
- 对char、byte或short进行移位处理,在移位之前,会被转换为int类型,得到的结果也是int类型
- 位移运算符可与等号组合使用(<<= 或 >>= 或 >>>=),在对char或short进行>>>=时,可能得到不正确的结果
public static void main(String[] args) {
int a=6;//二进制"110"
a<<=3;//"110"左移3位 得到 “110 000” 转十进制为48
System.out.println(a); // 48
a>>=3;//"110 000"右移3位 得到 “110” 转十进制为6
System.out.println(a); // 6
a>>>=1;//"110"右移1位 得到 “11” 转十进制为3
System.out.println(a); // 3
a=-6;//二进制"1111111111111111111111111111111111111111111111111111111111111010"
a<<=3;//左移3位 得到 “1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1101 0 000” 转十进制为-48
System.out.println(a); // -48
a>>=3;//右移3位 得到"1111111111111111111111111111111111111111111111111111111111111010" 转十进制为-6
System.out.println(a); // -6
}
赋值运算符
操作符 | 例子 | 描述 |
---|---|---|
= | int a=22 | 将右操作数的值赋给左侧操作数 |
- = | 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 |
& = | a % = b | 相当于a = a & b |
^ = | a ^ = b | 相当于a = a ^ b |
<< = | a << = b | 相当于a = a << b |
>> = | a >> = b | 相当于a = a >> b |
public static void main(String[] args) {
int a=22;int b=3;
System.out.println(a); // 22
a+=b;
System.out.println(a); // 25
a-=b;
System.out.println(a); // 22
a*=b;
System.out.println(a); // 66
a/=b;
System.out.println(a); // 22
a%=b;
System.out.println(a); // 1
a|=b;
System.out.println(a); // “|”有1为1否则为0 ,a的二进制为“1”,b的二进制为“11”,结果为“11”转十进制为3
a&=b;
System.out.println(a); // “&”相同为1否则为0 ,a的二进制为“11”,b的二进制为“11”,结果为“11”转十进制为3
a^=b;
System.out.println(a); // “^”相同为0否则为1,a的二进制为“11”,b的二进制为“11”,结果为“00”转十进制为0
a=6;//二进制"110"
a<<=b;//110 000
System.out.println(a); // 48
a>>=b;//110
System.out.println(a); // 6
}
关系运算符
操作符 | 名字 | 描述 |
---|---|---|
> | 大于 | |
> = | 大于等于 | |
== | 等于 | 比较的是地址,存储地址相同为true |
< | 小于 | |
< = | 小于等于 | |
!= | 不等于 | 比较的是地址,存储地址相同为false |
注:关系运算符产生的结果为布尔类型
//“==”比较的是地址,“equals”比较的是值
public static void main(String[] args){
String s1 = "str";
String s2 = new String(s1);
String s3 = s1;
System.out.println("s1 == s2 \t 结果: " + (s1 == s2)); //s1 == s2 结果:false
System.out.println("s1 == s2 \t 结果: " + (s1 != s2)); //s1 != s2 结果:true
System.out.println("s1 equals(s2) \t 结果:" + (s1.equals(s2)));//s1 equals(s2) 结果:true
System.out.println("s1 == s3 \t 结果:" + (s1 == s3)); //s1 == s3 结果:true
System.out.println("s1 == s3 \t 结果:" + (s1 != s3)); //s1 != s3 结果:false
System.out.println("s1 equals(s3) \t 结果:" + (s1.equals(s3)));//s1 equals(s3) 结果:true
}
三元运算符
result = 布尔表达式 ? value1 : value2
布尔表达式结果为true,result = value1;
布尔表达式结果为false,result = value2;
public static void main(String[] args) {
int a=6,b=2;
int result=a > b ? (a-b) : (a+b);
System.out.println(result); // a-b = 4
result=a < b ? (a-b) : (a+b);
System.out.println(result); // a+b = 8
}