* 面试题 1:看下面的程序是否有问题,如果有问题,请指出并说明理由。
* byte b1 = 3;
* byte b2 = 4;
* byte b3 = b1 + b2;
* 从两方面去回答这个题
* b1和b2是两个变量,变量里面存储的值都是变化的,所以在程序运行中JVM是无法判断里面具体的值
* byte类型的变量在进行运算的时候,会自动类型提升为int类型
* byte b4 = 3 + 4;
* 3和4都是常量,java有常量优化机制,就是在编译的的时候直接把3和4的结果赋值给b4了
面试题 2
String s1 = "a";
String s2 = "b";
String s3 = "ab";
System.out.println(s3 == s1 + s2); // false
System.out.println(s3 == "a" + "b"); // true
面试题 3
* byte b = 10;
* b++;
* b = b + 1;
* 问哪句会报错,为什么
s = s + 2; // 报错,short类型参与运算会转换成int类型,相加后结果是int,赋值给short可能损失精度.
s += 2; // 不报错,相当于 s = (short)(s + 2);
面试题 4 请自己实现两个整数变量的交换
int a = 10;
int b = 20;
第一种:不使用第三方变量
a = a ^ b;
b = a ^ b;
a= a ^ b;
第二种:使用第三方变量
int temp = a;
a = b;
b = temp;
面试题 5 用最高效的方式计算2*8的结果.
2 << 3
面试题 6
* byte可以作为switch的表达式吗? 可以
* long可以作为switch的表达式吗? 不可以
* String可以作为switch的表达式吗? JDK1.7之后可以
switch表达式允许的数据类型是:byte 、 short、 int 、 char;jdk5之后增加:枚举;JDK7之后增加:String
|