目录
逻辑运算符(布尔运算符)
& 逻辑与
| 逻辑或
!逻辑非(取反)
^ 逻辑异或(两边的算子只要不一样,结果就是ture)
&& 短路与
|| 短路或
1、逻辑运算符要求两边的算子都是布尔类型,并且逻辑运算符最终的运算结果也是一个布尔类型;
2、“短路与(或)”和“逻辑与(或)”最终的结果相同,只不过“短路与(或)”存在短路现象
1、逻辑与&
&左边无论是true还是flase都会计算右边;
int x=10;
int y=8;
System.out.println(x < y & ++x < y);
System.out.println(x);
运行结果为11
2、短路与&&
&&左边若为false则直接短路,右边不再计算(短路现象);
int x=10;
int y=8;
System.out.println(x < y && ++x < y);
System.out.println(x);
运行结果为10
从某个角度来看,短路与更智能,效率更高;
运算符
1、赋值运算符
+=、-=、*=、/=、%=;
byte、short、char混合运算时,先各自转换成int;
byte b=10;
b=b+5;
System.out.println(b);
编译报错,(b+5自动转换成了int类型,所以要想通过编译,需要加强制转换或者使用b+=5)
byte b=10;
b=(byte)(b+5);
b+=5;
System.out.println(b);
以上述例子为例
b+=5和b=b+5并不等同;
b+=5与b=(byte)(b+5)是等同的;
结论:
扩展类的赋值运算符不改变运算结果类型,假设最初这个变量的类型是byte类型,无论怎么进行追加或追减,最终该变量的数据类型还是byte类型,但有可能会损失;
2、字符串连接运算符
关于java中"+"运算符:
1、+运算符在java语言当中有两个作用:
*加法运算,求和;
*字符串的连接运算;
2、"+"两边的数据都是数字的话一定是加法运算;
3、"+"两边的数据只要有一个数据是字符串,一定会进行字符串的连接运算,连接运算之后的结果还是一个字符串类型;
静态输出
e.g.System.out.println(10+20);//30
System.out.println(10+20+"30");//"3030"
System.out.println(10+(20+"30");//"102030"
System.out.println("10+20="+a+b);
"10+20="是字符串;
"10+20="+a先运算字符串+a等于个字符串"10+20=10";
"10+20="+a+b再运算+b等于个字符串"10+20=1020";
System.out.println("10+20="+(a+b));
此时先运算(a+b)=30,在进行字符串"10+20="+30="10+20=30";
动态输出
System.out.println(a+"+"+b+"="+(a+b));
3、三元运算符/三目运算符/条件运算符
e.g.1
10,'男'不是一个完整的java语句;
boolean sex=false;
sex ? '男' : '女';
编译会报错;
修改如下:
boolean sex=false;
char c = sex ? '男' : '女';
System.out.println(c);
e.g.2
boolean sex=false;
char c = sex ? "男" : '女';
System.out.println(c);
编译报错,类型不兼容,但可以直接用
System.out.println(sex ? "男" : '女');