一、字符串拼接符
符号:+
注意: +两侧都是数值,此符号为算数运算符 +两侧有一侧是字符串或两侧都是字符串,此符号为字符串拼接符
System.out.println(1+2+"abc"+"def"+1+2); // 3+"abc"+"def"+1+2 // "3abc"+"def"+1+2 // "3abcdef"+1+2 // "3abcdef1"+2 // "3abcdef12"
二、逻辑运算符
符号: &与 &&短路与 |或 ||短路或 ^异或 !非
注意: &、&&、|、||、^:前后两者接boolean值 !后面接boolean值,表示置反 逻辑运算符的结果必须是boolean值
//&与:两侧接boolean值,两侧都成立(true),结果才为true System.out.println(true&true);//true System.out.println(false&true);//false System.out.println(true&false);//false System.out.println(false&false);//false //&&短路与:两侧接boolean值,两侧都成立(true),结果才为true //&&短路与:判断前者为false后,不会判断后者,效率高 System.out.println(true&&true);//true System.out.println(false&&true);//false System.out.println(true&&false);//false System.out.println(false&&false);//false //|或:两侧接boolean值,两侧有一侧为true,结果就为true System.out.println(true | true);//true System.out.println(false | true);//true System.out.println(true | false);//true System.out.println(false | false);//false //||短路或:两侧接boolean值,两侧有一侧为true,结果就为true //||短路或:判断前者为true后,不会判断后者,效率高 System.out.println(true || true);//true System.out.println(false || true);//true System.out.println(true || false);//true System.out.println(false || false);//false //^异或:两侧接boolean值,相同为false,不同为true System.out.println(true ^ true);//false System.out.println(false ^ true);//true System.out.println(true ^ false);//true System.out.println(false ^ false);//false //!非 - 置反:true变flase,false变true boolean bool1 = true; System.out.println(!bool1);//false boolean bool2 = false; System.out.println(!bool2);//true
三、位运算符
知识点:位运算符 理 解:将十进制的数据转换为二进制,再做运算
符号: &与 |或 ^异或 << 左移 >> 右移 >>> 无符号位右移 注意: &、|、^:前后两侧是boolean值,此符号为逻辑运算符 &、|、^:前后两侧是数值,此符号为位运算符
//&与:同位比较,两者为1,结果才为1 byte b1 = 20; //0001,0100 byte b2 = 19; //0001,0011 byte result = (byte)(b1 & b2); System.out.println(result);//16 -- //0001,0000
//|或:同位比较,两者有1,结果就为1 int i1 = 20;//0000,0000,0000,0000,0000,0000,0001,0100 int i2 = 19;//0000,0000,0000,0000,0000,0000,0001,0011 //i1+i2 0000,0000,0000,0000,0000,0000,0001,0111 System.out.println(i1 | i2);//23
//^异或:同位比较,相同为0,不同为1 int i1 = 20;//0000,0000,0000,0000,0000,0000,0001,0100 int i2 = 19;//0000,0000,0000,0000,0000,0000,0001,0011 //0000,0000,0000,0000,0000,0000,0000,0111 System.out.println(i1 ^ i2);//12
//<<左移:整体向左移动n位,就用n个0补位(补到最低位) //经验:左移1位相当于乘以2 int a = 1024;//0000,0000,0000,0000,0000,0100,0000,0000 //0000,0000,0000,0000,0001,0000,0000,0000 System.out.println(a << 2);//4096
//>>右移:整体向右移动n位,就用n个最高位补位 //经验:右移1位相当于除以2 int b = 1024;//0000,0000,0000,0000,0000,0100,0000,0000 //0000,0000,0000,0000,0000,0001,0000,0000 正数按照0补位,补到最高位 System.out.println(b >> 2);//256 int c = -1024;//1111,1111,1111,1111,1111,1100,0000,0000 负数按照1补位,补到最高位 //1111,1111,1111,1111,1111,1111,0000,0000 System.out.println(c >> 2);//-256
//>>>无符号位右移:整体向右移动n位,就用n个0补位(补到最高位) int d = 1024;//0000,0000,0000,0000,0000,0100,0000,0000 //0000,0000,0000,0000,0000,0001,0000,0000 System.out.println(d >>> 2);//256 int e = -1024;//1111,1111,1111,1111,1111,1100,0000,0000 //0011,1111,1111,1111,1111,1111,0000,0000(最高位补0变为正数) System.out.println(e >>> 2);//1073741568