Day6---学习Java第二弹
2021-07-16
运算符和表达式
一、算术运算符和算术表达式
1、单目算术运算符
%---取余 ++---自加 -- ---自减 - ---取反
public class zijia { public static void main(String[] args) { int i =4,j; j=(i++)+(i++); System.out.println("j="+j+"i="+i); i=3; j=(++i)+(++i); System.out.println("j="+j+"i="+i); } }
需要注意的是:自加和自减运算只应用于变量,且位于变量不同侧有不同的效果
int a1=2,a2=2; int b=(++a1)*2; int c=(a2++)*2;
执行后b的值为6,c的值为4,当++在变量前面时,先对变量进行+1,然后代入整个运算,当++在变量后面时,先进行运算,再对变量进行+1
2、双目算术运算符
需要两个操作数,写在运算符的左右两边
比如 5/2=2
注意:两个整数类型的数据做除法时,结果只保留整数部分,如 2/3=0
取模运算符的两端的操作数不只可以用于整型数,也可以应用于浮点数。
3、算术运算符的优先级
放个图 ヾ(๑╹◡╹)ノ"
4、算术表达式
注意点: 可使用括号改变优先级的次序
过长的表达式可以分为几个表达式来写
一个表达式里面不要连续使用两个运算符,可以用括号或者空格进行分隔
1 public class suanshuyunsuanfu { 2 3 public static void main(String[] args) { 4 int x,y,z,a,b; 5 a=11; 6 b=3; 7 x=a%b; 8 y=3+ --a; 9 z=7+(++b); 10 System.out.print("\tx="+x); 11 System.out.print("\ty="+y); 12 System.out.println("z="+z); 13 } 14 15 }
二、赋值运算符和赋值表达式
eg: double s=6.5+45; //将表达式6.5+45 的值赋给变量s
再放个图٩(๑❛ᴗ❛๑)۶
1 public class fuzhiyunsuanfu { 2 3 public static void main(String[] args) { 4 int x,y,z; 5 x=1; 6 y=2; 7 z=3; 8 x-=y; 9 y/=x; 10 z%=x; 11 System.out.print("x="+x+"\ty="+y+"\tz="+z); 12 } 13 14 }
三、关系运算符和关系表达式
比较两个表达式大小关系的运算,结果为真true或者假false
再来一个图ヾ(✿゚▽゚)ノ
1 public class guanxiyunsuanfu { 2 3 public static void main(String[] args) { 4 int i=1000; 5 int j=100; 6 boolean k; 7 k= i<j; 8 System.out.print("i<j is "+k); 9 } 10 11 }
四、逻辑运算符和逻辑表达式
逻辑运算符用于对布尔型变量进行运算,结果也是布尔型。
还有一个图ヾ(◍°∇°◍)ノ゙
注意:从上图可以看出来&与&&,|与||的结果是一样的
所以我搜了一下&、|与&&和||的区别
&和|执行操作时,运算符左右两边的表达式首先被运算,然后对两边的结果进行与、或运算
&&与||执行操作时,从左到右,如果能从左边的表达式得到操作数并且能确定结果,则不再对右边的表达式进行运算。
分析比较而言,&&和||的运算速度更快。
1 public class luojiyunsuan { 2 3 public static void main(String[] args) { 4 int i=3,j=4; 5 boolean k1,k2; 6 k1=(i<j) && (++i<j); 7 k2=(i<j) || (i<j); 8 System.out.print("k1="+k1+"k2="+k2); 9 } 10 11 }
五、位运算符与位表达式
对二进制数进行运算
最后一个图(๑╹◡╹)ノ"""
六、其他运算符
条件运算符:( a? b :c )当a为true时 表达式的值为b,否则为c
括号:优先级最高
域运算符(.):逐级向下的引用,如 System.out.println()
逗号(,):表达式的值为最后一个的值;x=1.y=2,x=x+y;则该式值为3
new:分配空间
type:强制类型转换
------------------------------------------------------------------------------------------------------------------------------
“短路”问题:
当计算逻辑表达式时,因为运算表达式比较多,按照先后运算,但是会出现短路,简单来说就是某段逻辑代码被跳过了,不执行了.
1 public class duanluwenti { 2 3 public static void main(String[] args) {//test1为真 test2为假 test3为真 4 5 boolean b = test1(0) && test2(3) && test3(1) ; 6 7 System.out.println("执行完毕,结果为:"+b); 8 9 } 10 public static boolean test1(Integer i) { 11 System.out.println("执行test1");return i < 1; 12 13 } 14 public static boolean test2(Integer i) { 15 System.out.println("执行test2");return i < 2; 16 17 } 18 public static boolean test3(Integer i) { 19 System.out.println("执行test3");return i < 3; 20 21 } 22 } 23
结果为
从执行结果中可以看出,test3并没有执行到,这就是逻辑与中的短路现象。
分析:
例如:boolean类型的A,B,C
A && B && C
在这里就必须满足ABC同时为真时才为真。因为代码是从左到右执行的,当代码执行到B时,发现B为false,那么整个表达式就一定为false,那么程序就没有必要再去执行C了。
明天是Java控制语句