Java中&与&&的区别,Java中|与||的区别,Java算术运算符,Java比较运算符,Java逻辑运算符,Java位运算符,Java三元运算符
运算符:算术运算符
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
+ | 正号 | +3 | 3 |
- | 负号 | b=4;-b | -4 |
+ | 加 | 5+5 | 10 |
- | 减 | 6-4 | 2 |
* | 乘 | 3*4 | 12 |
/ | 除 | 5/5 | 1 |
% | 取模(取余) | 7%5 | 2 |
++ | 自增(前):先运算后取值 | a=2;b=++a | a=3;b=3 |
++ | 自增(后):先取值后运算 | a=2;b=a++ | a=3;b=2 |
– | 自减(前):先运算后取值 | a=2;b=–a | a=1;b=1 |
– | 自减(后):先取值后运算 | a=2;b=a– | a=1;b=2 |
+ | 字符串连接 | “He”+“llo” | “Hello” |
除号
class Aritest {
public static void main(String[] args) {
int num1 = 12;
int num2 = 5;
int jieguo1 = num1 / num2;
System.out.println(jieguo1); // 2
int jieguo2 = num1 / num2 * num2;
System.out.println(jieguo2); // 10
// 小学加减乘除
double jieguo3 = num1 / num2; //2.0
double jieguo4 = num1 / num2 + 0.0; //2.0
double jieguo5 = num1 / (num2 + 0.0); //2.4
double jieguo6 = (double)num1 / num2; //2.4
double jieguo7 = (double)(num1 / num2); //2.0
System.out.println(jieguo3);
System.out.println(jieguo4);
System.out.println(jieguo5);
System.out.println(jieguo6);
System.out.println(jieguo7);
}
}
注意:取余运算结果的符号与被摸数的符号相同
// %:取余运算
int m1 = 12;
int n1 = 5;
System.out.println("m1 % n1 = " + m1 % n1);
int m2 = -12;
int n2 = 5;
System.out.println("m2 % n2 = " + m2 % n2);
int m3 = 12;
int n3 = -5;
System.out.println("m3 % n3 = " + m3 % n3);
int m4 = -12;
int n4 = -5;
System.out.println("m4 % n4 = " + m4 % n4);
int a1 =10;
int b1 = ++a1;
System.out.println("a1 = " + a1 + ",b1 = " + b1);
int a2 =10;
int b2 = a2++;
System.out.println("a2 = " + a2 + ",b1 = " + b2);
//注意点:
short d1 = 1;
//d1 = d1 +1;//编译失败
//d1 = (short)(d1 + 1); //正确的
d1++; //自增1不会改变本身变量的数据类型
System.out.println(d1);
结果:
m1 % n1 = 2
m2 % n2 = -2
m3 % n3 = 2
m4 % n4 = -2
a1 = 11,b1 = 11
a2 = 11,b1 = 10
运算符:比较运算符
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
== | 相等于 | 4==3 | false |
!= | 不等于 | 4!=3 | true |
< | 小于 | 4<3 | false |
> | 大于 | 4>3 | true |
<= | 小于等于 | 4<=3 | false |
>= | 大于等于 | 4>=3 | true |
instanceof | 检查是否是类的对象 | “Hello” instanceof String | true |
▶ 比较运算符的结果都是Boolean型,也就是要么是true,要么是false
▶ 比较运算符 “==” 不能写成 “=”
public class comparetest {
public static void main(String[] args) {
int i = 20;
int j = 10;
System.out.println(i == j); //false
System.out.println(i = j); //20
boolean b1 = true;
boolean b2 = false;
System.out.println(b2 == b1); //false , b2和b1不相等
System.out.println(b2 = b1); //true ,b1赋值给b2
boolean bb1 = false;
if(bb1 == true) {
System.out.println("结果为真");
}
else {
System.out.println("结果为假"); //判断结果为假
}
}
}
运算符:逻辑运算符
逻辑运算符只适用于Boolean类型
运算符 | 解释 | 运算符 | 解释 | 备注 | |
---|---|---|---|---|---|
& | 逻辑与 | && | 短路与 | ||
| | 逻辑或 | || | 短路或 | ||
! | 逻辑非 | ^ | 逻辑异或 |
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 | ture |
false | true | false | false | true | true | ture | ture |
false | false | false | false | false | false | ture | false |
&与&&
区分 & 与 &&
相同点1:& 与 && 的运算结果相同
相同点2:当符号左边时true时,二者都会执行符号右边的运算
不同点:当符合左边的时false时,&会继续执行符合右边的,&&则不会执行
开发中推荐使用&&
|与||
区分:| 与 ||
相同点1:& 与 && 的运算结果相同
相同点2:当符号左边时false时,二者都会执行符号右边的运算
不同点:当符合左边的时true时,|会继续执行符合右边的,||则不会执行
开发中推荐使用||
public class logictest {
public static void main(String[] args) {
boolean b1 = true;
//b1 = false;
int num1 = 10;
if(b1 & (num1++ > 0)){
System.out.println("结果A"); //当b1=true时,输出:结果A
}else{
System.out.println("结果B"); //当b1=false时,输出:结果b
}
System.out.println("num1 = " + num1); //当b1=true时,输出:num1 = 11。当b1=false时,输出:num1 = 11
boolean b2 = true;
//b2 = false;
int num2 = 10;
if(b2 && (num2++ > 0)){
System.out.println("结果A"); //当b1=true时,输出:结果A。
}else{
System.out.println("结果B"); //当b1=false时,输出:结果b
}
System.out.println("num2 = " + num2); //当b1=true时,输出:num1 = 11。当b1=false时,输出:num1 = 10
}
}
运算符:位运算符
运算符 | 运算 | 范例 | 位运算符的细节 |
---|---|---|---|
<< | 左移 | 3 << 2 = 12 —> 3*2*2=12 | 空位补0,被一次的高位丢弃,空缺位补0 |
>> | 右移 | 3 >> 1 = 1 —> 3/2=1 | 被移位的的二进制最高位是0,右移后,空缺位补0;最高位是1,空缺位补1。 |
>>> | 无符号右移 | 3 >>> 1 = 1 —> 3/2=1 | 被移位的二进制最高位无论是0或者是1,空缺位都用0补。 |
& | 与运算 | 6 & 3 =2 | 二进制位进行&运算,只有1&1时结果是1,否则是0。 |
| | 或运算 | 6 | 3 = 7 | 二进制位进行|运算,只有0|0时结果是0,否则是1。 |
^ | 异或运算 | 6 ^ 3 = 5 | 相同二进制位进行运算,结果是0;11=0,00=0,<br>不相同二进制位运算结果是1;10=1,01=1 |
~ | 取反运算 | ~6 = -7 | 正数取反,各二进制码按补码各位取反 负数取反,各二进制码按补码各位取反 |
<< 和 >> 结论:
位运算符操作的都是整形的数据
<< : 在一定范围内,每向左移1位,相当于 * 2
<< : 在一定范围内,每向右移1位,相当于 / 2
**& 和 | 和 ^ **
public class bittest {
public static void main(String[] args) {
int i = 21;
System.out.println("i << 2 = " + (i << 2)); //结果:i << 2 = 84
System.out.println("i << 3 = " + (i << 3)); //结果:i << 3 = 168
System.out.println("i << 26 = " + (i << 26)); //结果:i << 26 = 1409286144
System.out.println("i << 27 = " + (i << 27)); //结果:i << 27 = -1476395008
int m = 12;
int n = 5;
System.out.println("m & n = " + (m & n)); //结果:m & n = 4
System.out.println("m | n = " + (m | n)); //结果:m | n = 13
System.out.println("m ^ n = " + (m ^ n)); //结果:m ^ n = 9
}
}
交换两个变量的值
int num1 = 10;
int num2 = 20;
System.out.println("num1=" + num1 + ",num2=" + num2);
//方式一:定义临时变量的方式
int temp = num1;
num1 = num2;
num2 = temp;
System.out.println("num1=" + num1 + ",num2=" + num2);
运算符:三元运算符
1.结构:(条件表达式)?表达式1 : 表达式2
2.说明
① 条件表达式的结果为Boolean类型
② 更具条件表达式真或假,决定执行表达式1,还是表达式2.
- 如果表达式为true,则执行表达式1
- 如果表达式为false,则执行表达式2
③ 表达式1和表达式2的类型要求是一致的
④ 三元运算符可以嵌套使用
3.凡是可以使用三元运算符的地方,都可以改些为if-else
4.如果程序既可以使用三元运算符,又可以使用if-else结构,那么优先使用三元运算符。原因:简洁、执行效率高。
public class SanYuanTest {
public static void main(String[] args) {
int m1 = 12;
int n1 = 5;
int max = (m1 > n1)? m1 : n1;
System.out.println(max);
double num = (m1 > n1)? 2 : 1.0;
System.out.println(num);
//(m > n)? 2 : "n大"; //字符类型没统一编译错误
String maxStr = (m1 > n1)? "m1大" : "n1大";
System.out.println(maxStr);
n1 = 12;
String maxStr1 = (m1 > n1)? "m1大" : ((m1 == n1)? "m1和n1相等" : "n1大");
System.out.println(maxStr1);
}
}
//获取三个数的最大值
int i1 = 12;
int i2 = 30;
int i3 = -45;
int max1 = (i1 > i2)? i1 : i2;
int max2 = (max1 > i3)? max1 : i3;
System.out.println("三个数中最大的值为:" + max2);
int max3 = (((i1 > i2)? i1 : i2) > i3)? ((i1 > i2)? i1 : i2) : i3;
System.out.println("三个数中最大的值为:" + max3);