1. &与&&的区别
- &是既可是逻辑运算符也可作为位运算符,&&只能是逻辑运算符
- &&具备短路功能(如果第一个表达式为false,则不再计算第二个表达式),&做逻辑运算符时,不具备短路功能
- 当两边的表达式不是布尔表达式时,&表示按位与操作
短路功能展示:&&:int a = 1; int b = 2; if(a==2 && (b=4)==4){ } System.out.println(a+"--"+b);
打印结果:1--4&:打印结果:1--2int a = 1; int b = 2; if(a==2 & (b=4)==4){ } System.out.println(a+"--"+b);
2.交换两个数的值
目前我知道的有四种写法
-
根据java的语言特性,一句代码即可交换
int a = 1; int b = 2; a = a + b - (b = a);//a = b +(b = a)*0; System.out.println(a+"-"+b);
-
通过加减法交换
int a = 1; int b = 2; a = a + b; b = a - b; a = a - b; System.out.println(a+"-"+b);
-
通过中间值交换
int a = 1; int b = 2; int c = b; b = a; a = c; System.out.println(a + "-" + b);
-
使用位操作交换
int a = 1; int b = 2; a = b ^ a; b = a ^ b; a = b ^ a; System.out.println(a + "-" + b);
3.String,StringBuilder,StringBuffer的区别
-
这三者都是final型的,即不能被继承
-
StringBuilder与StringBuffer继承自同一父类AbstractStringBuilder
-
StringBuilder是非线程安全的,StringBuffer和String是线程安全的
-
这三者内部都是用cha[]来存放值的,只是String的是final型,也就是说,但试图修改String变量指向的对象值时,实际上是生成了新的String对象,并让String变量指向新对象,于是造成了String的值可修改的假象
4.final,finalize,finally的区别
请参考我写的这篇博文:
final finally finalize的区别
5.java中的各种Object和Object-s类
6.Java中集合类
7.抽象类与接口有什么区别?
8.try/catch/finally结构
- 当try中有return时,finally中的代码是否会执行?什么时候执行?
public static void main(String[] args) {
System.out.println((new Test()).test());
}
public int test() {
int i = 1;
try {
i--;
return i;
} catch (Exception e) {
// TODO: handle exception
return -1;
} finally {
i = i + 1;
System.out.println(i);
}
}
运行结果为:1 0
可以看出,当运行到return之后,i的值被保存起来,再接着执行finally中的代码,完成后,返回保存的运行结果。也就是说finally中的代码对函数的执行结果是没有影响的。
- java中的throw,throws是什么意思?
throw表示抛出异常
throws表示捕获并向外抛出异常public static void main(String[] args) { (new Test()).test(1); } public void test(){ throw new NullPointerException(); } public void test(int i)throws NullPointerException{ try { test(); } catch (Exception e) { // TODO: handle exception System.out.println(e); } }
运行结果: java.lang.NullPointerException