1、面试题: 
  第一题: 
  byte b1=3,b2=4,b; 
  b=b1+b2; 
  b=3+4; 
  哪句是编译失败的呢?为什么呢? 
 
  第二题: 
  byte  by = 130;有没有问题?有问题如何解决?结果是多少呢? 
 
  第三题: 
  byte b = 10; 
  b++; 
  b = b + 1; 
  哪句是编译失败的呢?为什么呢? 
 
2、short s = 1; s = s + 1;有没有问题?如果有怎么解决? 
   short s = 1; s += 1;有没有问题?如果有怎么解决? 
 
3、需求: 
  int a = 10; 
  int b = 20; 
  请用代码实现交换两个变量, 
  即结果为: a = 20;  b = 10;  (3种) 
  
 
 答案:  int a = 1; 
  int b = 2; 
  int temp = a; 
      a = b; 
      b = temp; 
  System.out.println("a= "+a+", b= "+b); 
  System.out.println("--------------------------------"); 
  int x = 1; 
  int y = 2; 
  x = x + y; 
  y = x - y; 
  x = x - y; 
  System.out.println("x= "+x+", y= "+y); 
  System.out.println("--------------------------------"); 
  int i = 1; 
  int j = 2; 
  i = i ^ j; 
  j = i ^ j; 
  i = i ^ j; 
  System.out.println("i= "+i+", j= "+j); 
  System.out.println("--------------------------------"); 
   
class Demo2_Operator { 
 public static void main(String[] args) { 
  /* 
  * 位异或运算符的特点 
 
  * ^的特点:一个数据对另一个数据位异或两次,该数本身不变。 
  */ 
 
  //System.out.println(5 ^ 10 ^ 10); 
  //System.out.println(5 ^ 10 ^ 5); 
 
  /* 
  * 请自己实现两个整数变量的交换(不需要定义第三方变量) 
  * 注意:以后讲课的过程中,我没有明确指定数据的类型,默认int类型。 
  */ 
 
  int x = 10; 
  int y = 5; 
 
  //需要第三方变量,开发推荐用这种 
  /*int temp; 
  temp = x; 
  x = y; 
  y = temp;*/ 
 
  //不需要定义第三方变量,有弊端,有可能会超出int的取值范围 
  /*x = x + y;    //10 + 5 = 15 
  y = x - y;    //15 - 5 = 10 
  x = x - y;    //15 - 10 = 5*/ 
 
  //不需要第三方变量,通过^来做 
  x = x ^ y;    // 10 ^ 5  
  y = x ^ y;    // 10 ^ 5 ^ 5 y = 10 
  x = x ^ y;    // 10 ^ 5 ^ 10  x = 5 
 
  System.out.println("x = " + x + ",y = " + y); 
 } 
} 
 
4、最有效率的算出2 * 8的结果 
class Demo3_Operator { 
 public static void main(String[] args) { 
  /* 
  *  <<:左移 左边最高位丢弃,右边补齐0 
  *  >>:右移 最高位是0,左边补齐0;最高为是1,左边补齐1 
  *  >>>:无符号右移 无论最高位是0还是1,左边补齐0 
  *  最有效率的算出2 * 8的结果 
  */ 
 
  //左移,向左移动几位就是乘以2的几次幂 
  //System.out.println(12 << 1);  //24 
  //System.out.println(12 << 2);  //48 
 
  /* 
  00000000 00000000 00000000 00001100  12的补码 
  (0)0000000 00000000 00000000 000011000  24的补码 
 (00)000000 00000000 00000000 0000110000  48的补码 
  */ 
 
  //右移,向右移动几位就是除以2的几次幂 
  //System.out.println(12 >> 1); 
  //System.out.println(12 >> 2); 
 
  /* 
  00000000 00000000 00000000 00001100  12的补码 
  000000000 00000000 00000000 0000110(0) 6 
  0000000000 00000000 00000000 000011(00) 3 
  */ 
 
  //最有效率的算出2 * 8的结果 
  System.out.println(2 << 3); 
 } 
} 
 
5、 
 * byte可以作为switch的表达式吗? 
 * long可以作为switch的表达式吗? 
 * String可以作为switch的表达式吗? 
 
 |   
        
 
    
    
    
     
 
 |