前因:
记录在牛客上刷题的错题记事本
1. 下面的方法,当输入为2的时候返回值是多少?
public static int getValue(int i) {
int result = 0;
switch (i) {
case 1:
result = result + i;
case 2:
result = result + i * 2;
case 3:
result = result + i * 3;
}
return result;
}
A : 0
B : 2
C : 4
D : 10
答案选D, 没有break,发生case穿透现象,程序会继续向下执行,直到遇到break或者结束switch语句的大括号为止。
2. 如下的Java程序 , 若采用命令行“java Test one two three”调用,则程序输出的结果为:
public class Test {
public static void main(String[] args) {
System.out.println(args[0]);
}
}
A : Test
B : one
C : two
D : java
答案选B,采用命令行“ java Test one two three ”调用,其中Test为调用的方法,而one two three则为Test方法里面main函数的参数;System.out.println(args[0]);表示输出第一个元素,故为one;
3. 下面论述正确的是()?
A : 如果两个对象的hashcode相同,那么它们作为同一个HashMap的key时,必然返回同样的值
B : 如果a,b的hashcode相同,那么a.equals(b)必须返回true
C : 对于一个类,其所有对象的hashcode必须不同
D : 如果a.equals(b)返回true,那么a,b两个对象的hashcode必须相同
答案选D, hashcode和equals的约定关系如下:
- 如果两个对象相等,那么他们一定有相同的哈希值(hash code)。
- 如果两个对象的哈希值相等,那么这两个对象有可能相等也有可能不相等。(需要再通过equals来判断)
4. 实现或继承了Collection接口的是()
A : Map
B : List
C : Vector
D : Iterator
E ; Set
答案选B,C,E。
5. 以下哪种方式实现的单例是线程安全的
A : 枚举
B : 静态内部类
C : 双检锁模式
D : 饿汉式
答案A,B,C,D。
- 饿汉式(线程安全,调用效率高,但是不能延时加载);
- 懒汉式(线程安全,调用效率不高,但是能延时加载);
- Double CheckLock实现单例:DCL也就是双重锁判断机制(由于JVM底层模型原因,偶尔会出问题,不建议使用);
- 静态内部类实现模式(线程安全,调用效率高,可以延时加载);
- 枚举类(线程安全,调用效率高,不能延时加载,可以天然的防止反射和反序列化调用)。