Java面试知识点

continue、break和return区别

continue:仅推出本次循环,剩下循环和方法继续执行。

break:终止循环,但是继续执行方法

return:终止循环和方法。

赋值操作符 “=” 在基本类型和对象引用中区别

对基本数据类型的肤质是很简单的。基本类型存储了实际的数值而非指向一个对象的引用,所以在为其赋值的时候,是直接将一个地方的内容复制到另一个地方。例如,对基本数据类型使用 a=b,那么b的内容就复制给a。若接着又修改了a,而b根本不会受这种修改的影响。

但是在为对象 “赋值” 的时候,情况却发生了变化。对一个对象进行操作时,我们真正操作的是对象的引用。所以倘若 “将一个对象赋值给另一个对象”,实际是将 “引用” 从一个地方复制到另一个地方。这意味着假若 c=d ,这样c和d都会指向原本只有d指向的那个对象。

操作符 “==” 和 equals() 方法的区别

“==” 对于非基本类型而言,比较的是对象的引用,对于基本类型比较的是值。较特殊的地方是String

equals() 在Object类中的实现是比较对象的引用,但是大多数Java类都覆盖了equals() 方法,使之实现内容值的比较,比如 Interger 类,String 类。

1
2
3
4
// Object 类中的equals方法
public boolean equals(Object obj) {
return (this == obj);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// String 类中的equals方法
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}

逻辑操作符中的短路概念

即已经确定结果的逻辑表达式不会执行之后的逻辑判断,例如:if( test1() || test2() ) 如果 test1() 返回值为 true,那么 test2() 方法不会被执行,因为逻辑表达式的值已经确定,没必要继续执行剩余的逻辑判断。这就是短路概念。

字符串操作符 + 和 +=

字符串操作符有一些很有趣的行为。如果表达式以一个字符串开头,那么后续所有操作必须是字符串型:

1
2
3
4
int x = 0, y = 1, z=2;
String s = "sum = "
System.out.println(s+x+y+z) // output:sum = 012
System.out.println(s+(x+y+z)) // output:sum = 3

注意第一个输出语句打印的是 sum = 012 ,而不是 sum = 3。之所以会出现这种情况,是因为Java编译器会将x,y和z转换成它们的字符串形式,然后连接这些字符串,而不是先把它们加到一起。

finalize() 的作用

程序员都了解初始化的重要性,但常常会忘记同样也重要的清理工作。毕竟,谁需要清理一个int呢?但在使用程序库时,把一个对象用完后就“弃之不顾”的做法并不总是安全的。当然,Java有垃圾回收器负责回收无用对象占据的内存资源。但也有特殊情况:假定你的对象(并非使用new)获得了一块“特殊”内存。为了应对这种情况,Java允许在类中定义一个名为finalize() 的方法。它的工作原理“假定”是这样的:一旦垃圾回收器准备好时放对象占用的存储空间,将首先调用其finalize()方法,并且在下一次垃圾回收动作发生时,才会真正回收对象占用的内存。所以要是你打算用finalize(),就能在垃圾回收时刻做一些重要的清理工作。

特殊情况例如 Java中调用非Java方法分配内存,在非Java代码中,也许会调用C的 malloc() 函数序列来分配存储空间,而且除非调用了 free() 函数,否则存储空间将得不到释放,从而造成内存泄漏。当然,free() 是C和C++中的函数,所以需要在 finalize() 中用本地方法(是指非Java代码)调用它。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×