今天继续昨天的内容
赋值运算符
赋值运算符即: “=”。
Java中的“=”和数学中的含义不同,比如:
int a=10,b=20;
a=a+b;
b=a-b;
a=a-b;
System.out.println("a="+a+"\n"+"b="+b);
如果将这几行代码中的“+”用数学符号理解的话,那肯定是一头雾水,因此在这里,“=”表示赋值。比如第一行表示将“a+b”的值赋予“a”,下面同理。所以这几行代码的本质是将a和b的值交换。
运行结果:
了解了赋值,现在来说说“+=”。
它的涵义也很简单:
int a=10;
a+=20;
system.out.println(a); //30
a+=20就是a=a+20。
int a=10;
a+=20;
int c=a+20;
System.out.println(a+=20);
System.out.println(a);
System.out.println(c);
很显然这几个输出的结果都是30。
那么来看看这个:
short s=10;
System.out.println(s+=20);
s=s+20;
System.out.println(s);
结果是什么呢?两个30吗?
事实上,“s=s+20”这行代码会报错。
为什么呢?还记得昨天学习的算术运算符吗?在“s+20”中,“20”是int型数据,“s”在算数运算符“+”的作用下自动升级成int型,所以s+20的结果是一个int型数据,而这时若还将它放入short型数据s中则会报错类型不兼容。而第一个则会正常输出30。
*因此:扩展的赋值运算符(+= 、-=、 =、/= 、%=)底层隐含了强制类型转换
自增自减运算符
“++” 、 “- -”
为方便起见,这里只讲“++”。
①单独使用
直接上代码:
int i=10;
i++;
System.out.println(i);
++i;
System.out.println(i);
由结果我们不难发现,不论i是在“++”的前面或是后面,i都被加了1。
②参与操作使用
int i=10;
int j=i++;
System.out.println("i="+i);
System.out.println("j="+j);
结果:
i同样是自加了1,变成了11,而赋给j的值却是i的初始值10。
int i=10;
int j=++i;
System.out.println("i="+i);
System.out.println("j="+j);
所以, 在参与操作的时候,i++是先赋值再++,++i是先++再赋值。
关系运算符
这里就与数学想通度极高了,直接上代码
int a=0,b=0;
a==b; //判断a与b是否相等,成立 为true,不成立为false 注意!是两个等号!
a!=b; //判断a与b是否不相等,(后面内容相同)
a>b;
a>=b;
a<b;
a<=b;
后四个与数学中完全一样,不赘述。
int i=10;
int j=++i;
System.out.println("i="+i);
System.out.println("j="+j);
System.out.println(i==j);
关系运算符的结果都是boolean类型,即,要么是true要么是false。
逻辑运算符
在数学中,我们要表示一个数x大于3且小于6,我们会写作:3<x<6,而在Java中,则需要写成:x>3&&x<6;其中,&&就是逻辑运算符,表示“与”。逻辑运算符都有:
&:逻辑与; a&b,全true才true(换言之有false则false);
| :逻辑或; a|b,有true则true;
^ :逻辑异或;a^b,相同为true,不同为false
! :逻辑非。!a、!!a,参考数学中的负号,!a与a的结果正好相反但是!!a的结果是和a相同的
a和b可以是数据,也可以是语句。
短路逻辑运算符
①&& : 短路与
②|| : 短路或
他们前边的有什么区别呢?
还是先看代码:
int i=10,j=20;
System.out.println((i++>100)&(j++>100));
System.out.println("i="+i);
System.out.println("j="+j);
int i=10,j=20;
System.out.println((i++>100)&&(j++>100));
System.out.println("i="+i);
System.out.println("j="+j);
不难看出,在两个条件均为false的情况下,&&后面的语句并不会运行。其实从名字我们就能够很好的理解了——“短路”,你品,你细品。前面我们已经说过,逻辑运算符与中只要有一个false结果就是false,所以当计算机得知第一个语句是false时它不会再去走第二个语句,因为第二个语句true false与否对于结果已经不重要了。
所以, && 和 ||的作用与前面的 & 和 | 相比,作用相同,但是具有短路效果。
注意!
&&如果左边为真,右边执行;左边为假,右边不执行。
||如果左边为假,右边执行;左边为真,右边不执行。
三元运算符
- 格式:关系表达式?表达式1:表达式2;
- 范例:a>b?a:b;
- 计算规则:
- 首先计算关系表达式的值,
-如果值为true,表达式1的值就是运算结果;
-如果值为false,表达式2的值就是运算结果。
int i=10,j=20;
System.out.println(i>j?i:j);
很简单吧?