java2-运算符
1,运算符分类:
-
算数运算符
+ - * / % ++ --
-
赋值运算符
= //扩展 += -= *= /=
-
关系/比较运算符
> < >= <= == !=
-
逻辑/布尔运算符
&& || ! & |
-
位运算符
& | ^ ~ >> << >>>
-
条件运算符
?:
2,运算符的优先级
- 计算>比较>逻辑>位
- 赋值<三目<逻辑<关系<算数<单目
3,算数运算符
-
+的作用:
-
表示正数
-
表示两数相加
-
字符串的拼接
public class TestOpt03{ public static void main(String[] args){ System.out.println(+5); //表示正数:5 System.out.println(5+6); //相加:11 System.out.println(5+'6'); //'6'的ascii码为54:59 //加号左右两侧的任意侧有字符串,+起的就是字符串拼接的作用,结果一定是字符串 int num = 56; System.out.println("num="+num); //num=56 System.out.println(5+6+"7"); //11+"7"-->117 System.out.println(5+'6'+"7"); //59+"7"-->597 System.out.println("5"+6+"7"); //567(char在字符串拼接时用字面值) System.out.println("5"+'6'+"7"); //567 System.out.println("5"+'6'+'7'); //567 } }
-
-
++:自增
-
++单独使用时,无论放在变量的前还是后,都是起到+1的作用
-
但如果++参与到运算中,++在前先自+1再运算,++在后先运算再自+1(无论++的位置,变量总会自+1,只是会对运算的结果产生影响)
public class TestOpt04{ public static void main(String[] args){ //++单独使用 int a = 5; a++; System.out.println(a); a = 5; ++a; System.out.println(a); //++参与运算 a = 5; int m = a++ + 7; System.out.println(m); //12 System.out.println(a); a = 5; m = ++a + 7; System.out.println(m); //13 System.out.println(a); } }
public class TestOpt05{ public static void main(String[] args){ int a = 5; System.out.println(a++ + a++); //11 System.out.println(a++ + ++a); //16 System.out.println(++a + a++); //20 System.out.println(++a + ++a); //25 } }
-
-
%所得结果:
所得结果的符号由被取模数确定,绝对值与被取模数和取模数取绝对值所得到的结果相同。 -
/所得结果:
两数同符号所得结果为正数,两数异符号所得结果为负数,绝对值与两数取绝对值所得到的结果相同。
4,赋值运算符
-
=的作用:将等号右侧的值赋给等号左侧
//交换两个数 public class TestOpt06{ public static void main(String[] args){ //任意给出两个数,交换两个数,再输出 int a = 5; int b = 6; System.out.println("交换前:"+a+'\t'+b); //middle a a b b middle 一个圈 int middle = a; a = b; b = middle; System.out.println("交换后:"+a+'\t'+b); } }
-
扩展赋值运算符
- a+=b 和 a=a+b的区别
- a+=b可读性稍差 编译效率高
- a=a+b可读性好 编译效率低
- a+=b可以强制类型转换,a=a+b不行
public class TestOpt07{ public static void main(String[] args){ int num1 = 10; int num2 = 20; int num3 = 30; int sum = 0; sum += num1; sum += num2; sum += num3; System.out.println("和为:"+sum); } }
public class TestOpt08{ public static void main(String[] args){ byte a = 10; int b = 20; a += b; //底层自动强制类型转换 a = a + b; //报错 //a = (byte)(a + b); } }
- a+=b 和 a=a+b的区别
5,逻辑运算符
-
&&和&的区别:
- &&(短路与)效率更高,只要左侧表达式为false,右侧表达式不计算,直接返回结果false。
- &(逻辑与)效率相对较低,无论左侧表达式的值,右侧表达式都会计算。
- ||(短路或),|(逻辑或)的区别类似。
-
!(逻辑非),^(逻辑异或)
public class TestOpt10{ public static void main(String[] args){ int i = 2; System.out.println((5==9)&&(i++==2)); //短路与,右侧表达式不计算 System.out.println(i); //2 System.out.println((5==9)&(i++==2)); //逻辑与,右侧表达式计算 System.out.println(i); //3 i = 2; System.out.println((5==5)&&(i++==2)); System.out.println(i); //2 } }
6,位运算符
-
如何区分位运算符与逻辑运算符
- 逻辑运算符:左右两侧连接布尔类型的操作数
- 位运算符:左右连接的是具体的数值
-
>>为有符号右移 >>>为无符号右移
public class TestOpt12{
public static void main(String[] args){
System.out.println(3<<2); //12
System.out.println(-3<<2); //-12
System.out.println(6>>2); //1
System.out.println(-6>>2); //-2
System.out.println(6>>>2); //1
System.out.println(-6>>>2); //1073741822
System.out.println(~(-6)); //5
}
}
7,条件运算符(三元运算符/三目运算符)
-
格式:a?b:c 其中a是一个布尔类型的表达式,a为true返回b,a为false返回c
public class TestOpt11{ public static void main(String[] args){ String str = (5<7)?"你好":"你不好"; System.out.println(str); //System.out.println((5<7)?"你好":"你不好"); } }
例题:
//例题1:取一个四位数的各个数位上的数字
import java.util.Scanner;
public class TestOpt02{
public static void main(String[] args){
//键盘录入四位数
System.out.print("请输入一个四位整数:");
Scanner sc = new Scanner(System.in);
//分别求四位上的数字
int data = sc.nextInt();
int a,b,c,d,dataRemain;
a = data / 1000;
b = data / 100 % 10;
c = data / 10 % 10;
d = data % 10;
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
}
}
行动是治愈恐惧的良药,而犹豫拖延将不断滋养恐惧。