1.算术运算符中着重说下"++"和"--":
"++"和"--"在运算中分为前++(--)和后++(--);
前++在运算中是本身先运算后在参与运算的,而后++不同,是本身在表达式中不参与运算的.
前--在运算中是本身先运算后在参与运算的,而后--不同,是本身在表达式中不参与运算的.
2.逻辑运算符中着重说下"|","||"和"&&","&"在执行上的区别:
逻辑运算符是对boolean类型的值进行运算的.
"|":或,"||":短路或;遇true则true.
"&":与,"&&":短路与;遇false则false.
在日常开发中短路与和短路或是比较常用的,在运算中,"|",前后关系表达式都得进行运算判断,"||",而"||"的前面的关系表达式如果为true,后面就不用进行运算了.
3.赋值运算符中着重说下"=","+=",在表达式中赋值和默认强转的区别:
byte b = 3;
b+=1;这行代码直接进行了类型转换
b= b + 1;而它必须进行向下转型b = b + (byte)1;
4.位运算符:
是对(数值)二进制进行运算的
">>":位右移(左补,最高位补为1,就补1,最高位为0,就补0)
"<<":位左移(右补0)
">>>":无符号右移(左补0)
"^":位异或(相同则0,不同则1)
"~":按位取反
"|":位与(遇0则0)
"&":位或(遇1则1)
5.三元表达式:
(关系表达式)?true:false;
6.面试题:
public class OperatorDemo { /** * 面试题1:交换变量 * int x = 10; int y = 20; */ @Test public void demo_01() { int x = 10; int y = 20; int n; n = x; x = y; y = n; System.out.println(x); System.out.println(y); } @Test public void demo_02() { int x = 10; int y = 20; int n; n = x+y; x = n-x; y = n-y; System.out.println(x); System.out.println(y); } @Test public void demo_03() { int x = 10; int y = 20; x=(x+y)-(y=x); System.out.println(x); System.out.println(y); } @Test public void demo_04() { int x = 10; int y = 20; x = x^y; y = x^y; x = x^y; System.out.println(x); System.out.println(y); } /** * 面试题2: * 如何最有效率的算出数字8 */ @Test public void demo_05() { System.out.println(2<<2); } @Test public void demo_06() { int a = 3; int b = 4; /** * 位运算符 需要把数值转化成二进制进行运算 * 3 * 00000000 00000000 00000000 00000011 * 4 * 00000000 00000000 00000000 00000100 */ System.out.println(a&b); /** 遇0则0 * 00000000 00000000 00000000 00000000 * * 0 */ System.out.println(a|b); /** 遇1则1 * 00000000 00000000 00000000 00000111 * * 7 */ System.out.println(a^b); /** 同0则1 特点:一个数据被另一个数据位异或两次 等于 它本身 * 00000000 00000000 00000000 00000111 * * 7 */ System.out.println(~a); /** 按位取反 * 00000000 00000000 00000000 00000011 * * 11111111 11111111 11111111 11111100 * 11111111 11111111 11111111 11111011 * 10000000 00000000 00000000 00000100 * -4 */ System.out.println(a<<2); /** 左移 扩大2^2 * 3 * 00000000 00000000 00000000 00000011 * (00)000000 00000000 00000000 0000001100 * * 12 */ System.out.println(a>>2); /** 右移 左边符号位为1,就补1,是0补0;缩小2^2 * 3 * 00000000 00000000 00000000 00000011 * 0000000000 00000000 00000000 000000(11) * 0 */ System.out.println(a>>>2); /** 无符号右移 左边永远补0 * 3 * 00000000 00000000 00000000 00000011 * 0000000000 00000000 00000000 000000(11) * 0 */ } } @Test public void demo_01() { /** * 使用三元运算符完成如下练习 比较两个数是否相等 获取两个数中最大值 获取三个数中最大值 */ int a =10; int b =20; int c =30; //比较两个数是否相等 System.out.println((a==b)?true:false); //获取两个数中最大值 System.out.println((a>b)?a:b); //获取三个数中最大值 int temp = a>b?a:b; int max = temp>c?temp:c; System.out.println(max); int max2 = (a>b)?((a>c)?a:c):((b>c)?b:c); System.out.println(max2); } @Test public void demo_02() { int x = 1,y = 1; if(x++==2 & ++y==2) { x =7; } System.out.println("x="+x+",y="+y); //x = 2 y = 2 } @Test public void demo_03() { int x = 1,y = 1; if(x++==2 && ++y==2) { x =7; } System.out.println("x="+x+",y="+y); //x = 2 y = 1 } @Test public void demo_04() { int x = 1,y = 1; if(x++==1 | ++y==1) { x =7; } System.out.println("x="+x+",y="+y); //x = 7 y = 2 } @Test public void demo_05() { int x = 1,y = 1; if(x++==1 || ++y==1) { x =7; } System.out.println("x="+x+",y="+y); // x = 7 y =1 ; } @Test public void demo_06() { boolean b = true; if(b==false) System.out.println("a"); else if(b) System.out.println("b"); else if(!b) System.out.println("c"); else System.out.println("d"); //b }