5.3 比较运算符 ==, !=, <, >, <=, >=, instanceof
比较运算符规则 //所有比较运算符看成一个整体就对了 跟纸上写法不同而已
1. 比较运算符操作得到的结果是boolean类型结果,要么true要么false
举例
System.out.println(3==4);//就是在计算3相等于4否,结果不是ture就是false
2.> < >= <= 它们只能操作数
3.== != 不仅可以操作数,也可以操作其它类型数据
==,=注意
代码中要做相等比较时用==,不要使用=,单等代表赋值
instanceof
检车一个对象是否是某一个类的实例
5.4 逻辑运算符 &, |, ^, !, &&, ||
逻辑运算概念
其实就是关系运算,逻辑运算符2边连接的肯定是布尔型表达式,运算完要么真要么假的表达式
逻辑运算不是比较运算 而是另多个表达式建立联系的符号
判断条件用的,最终目的是看多个条件相比结果是真是假
& 与(并且) 两边的布尔型表达式的结果,两边全true结果为true,否则为false
true&true=true //老师叫小强小明过来,都来了老师才爽,有一个没来就不爽
true&false=false
false&true=false
false&false=false
举例
x=4;
x>3&x<6; //Java中不能出现6>x>3,为了把2个表达式建立联系就用到了逻辑运算符
| 或(要么) 两边的布尔型表达式的结果,两边全false结果为false,否则为true
true|true=true //小强小明,两人来了
true|false=true //或者其中一个来
false|true=true //或者其中一个来
false|false=false //一个也没来不行
举例
x=4
3<=x | x>=6; //x要么小于等于3 要么大于等于6
! 非 两边的布尔型表达式的结果,取反,判断事物的另一面,非真即假,非假即真
!true=false
!false=true
^ 异或 两边的布尔型表达式的结果,两边相同就为false 两边不同就为true
true^true=false //两边变相同不高兴了false
true^false=true //两边不同才高兴true
false^true=true
false^false=false
&& 短路与 两边的布尔型表达式的结果,左边为真,右边运算(因为左边为真右边结果会影响总结果),左边为假右边无论真假都不运算(短路)
int x=7;
x>3 && x<6;
System.out.println(x);
|| 短路或 两边的布尔型表达式的结果,当左边为真,右边不运算(因为或运算有一个为真即可,左边为真右边真假都不影响总结果)
笔试题单与&&双与&&,单或|双或||的区别
&,&& 单与和双与的区别
单与&,在计算机中将整个式子全运算完后得到结果
双与&&,左边为真,右边运算, (因为左边为真右边结果会影响总结果)左边为假右边无论真假都不运算(短路)
|,|| 单或和双或的区别
单或|,在计算机中将整个式子全运算完后得到结果
双或||,当左边为真,右边不运算(因为或运算有一个为真即可,左边为真右边真假都不影响总结果)
举例
System.out.println("短路效果");
int a=10;
int b=5;
boolean flag=(a>b)&&(a++>5); //通过a>b 可以确定整个式子的结果
System.out.println(flag);
System.out.println(a); //a的值不改变,有&&右边短路,提高效率
int a=10;
int b=5;
boolean flag=(a>b)&(a++>5); //通过a>b 可以确定整个式子的结果,但是后面式子也会运算
System.out.println(flag);
System.out.println(a); //a的值改变,计算机要把两边运算完再比较结果,效率低
所以开发中用&& ||比较多, 短路与短路或提高了效率,因为右边可以根据情况不做运算
与或优先级
&&优先级高
System.out.println(false && true || true);
System.out.println(true || true && false);
5.5 移位运算符<<, >>, >>>
关于位运算符 //使用位运算符在内存中运算速度比较快
操作二进制数的, 0代表false假,1代表true真,非0为真,与逻辑运算符规则一致,
位运算符好处
对二进制数进行操作的运算符 这样的方法在内存中运算速度比较快,效率高 开发用不多,但面试多
位运算符怎么用?
什么时候用?
<< 左移
左移就是该数乘以2的次幂的过程(移几次就是几次幂) 左边舍弃,右边用0补 举例3 << 2 = 12 --> 3*2*2=12
举例
int x=5;
x=x<<3; //5乘2的3次幂=40
>> 右移
右移就是该数除以2的几次幂的过程(移几次就是几次幂) 右边舍弃,左边为0用0补,为1用1补 举例3 >> 1 = 1 --> 3/2=1
举例
int x=6;
x=x>>1 //二进制位最高位空什么,空位就补什么
>>> 无符号右移
相当于除以2操作 右边舍弃,左边高位永远用0补 常用于取二进制中的数据 举例3 >>> 1 = 1 --> 3/2=1
举例
int x=6;
x=x>>>1 //右移出的空位无论最高位是什么右移出的空位都补0怎么移动都是正数
5.6 位运算符 &, |, ^, ~
& 与运算
如果有一个为0 结果为0,好处可以对二进制数中的1进行获取 因为其中有0结果就不可能为1了 举例6 & 3 = 2
| 或运算
如果有一个为1 结果为1,一般对某些数据进行加密解密,或者右移左移的时候对调整这个位运算数据结果的时候用,举例6 | 3 = 7
^ 异或运算
相同为0 不同为1,一个数异或同一个数2次结果还是该数本身,用途加密,异或数是几其他人不知道,该数放U盘中就是U盾
~ 反码
把这个数的二进制数1变0 0变1,,举例~6 = -7
5.7 三元运算符 ? :
三元运算符概念
三个元素参与运算的符号
三元运算符格格式
结果 = (条件表达式) ? (表达式1) : (表达式2) ;
如果条件为真,运算冒号后的结果是表达式1;将结果赋给等号左边
如果条件为假,运算冒号后的结果是表达式2; 将结果赋给等号左边
举例
获取两个数中大数
int x=3,y=4,z;
z = (x>y)?x:y; //z变量存储的就是两个数的大数
public int finalMax(int a,int b,int c)
{
int max =a >b?a:b;
}
附
码表问题
(ASCII,gb2312,GBK,GB18030,unicode)
任何国家码表一般都兼容ASCII码表
Java中定义’字符’用的就是unicode码表 Unicode中任何一个字符都占2个八位
Java中定义“字符串”用的是本机默认的码表
|