第一阶段考试
- 选择题(每题2分,共40分)
1) 输出结果是:(A 主方法中的局部变量a,b在栈内存储并赋值23,47,调用swap方法是在栈内重新存储俩个新变量a,b(变
量名可更换为其他)将主方法的值分别传递给新变量a,b所以新变量a,b值的互换不影响主方法a,b的值)
public static void swap(int a, int b) {
int c = a;
a = b;
b = c;
}
public static void main(String[] args) {
int a = 23;
int b = 47;
System.out.println(“Before, a:” + a + ” b:”+ b);
swap(a,b);
System.out.println(“After, a:” + a + ” b:”+ b);
}
A.
Before, a:23 b:47
After, a:23 b:47
B.
Before, a:23 b:47
After, a:47 b:23
2) 输出结果是:(A 主方法中的局部变量a,b在堆内new出并赋值23,47,调用swap方法是在栈内存储俩个新变量a,b(变量
名可更换为其他)将主方法的地址分别传递给新变量a,b所以新变量a,b指向地址的互换不影响主方法a,b的值)
public static void swap(Integer a, Integer b) {
Integer c = a;
a = b;
b = c;
}
public static void main(String[] args) {
Integer a = new Integer(23);
Integer b = new Integer(47);
System.out.println(“Before, a:” + a + ” b:”+ b);
swap(a,b);
System.out.println(“After, a:” + a + ” b:”+ b);
}
A.
Before, a:23 b:47
After, a:23 b:47
B.
Before, a:23 b:47
After, a:47 b:23
3) 输出结果是:(A 主方法中的局部变量a,b在字符串常量池中储并赋值23,47,调用swap方法是在字符串常量池重新存储
俩个新变量a,b(变量名可更换为其他)然后指向已有的字符串23,47,所以新变量a,b指向地址的互换不影响主方法a,b的值
)
public static void swap(String a, String b) {
String c = a;
a = b;
b = c;
}
public static void main(String[] args) {
String a = “23”;
String b = “47”;
System.out.println(“Before, a:” + a + ” b:”+ b);
swap(a,b);
System.out.println(“After, a:” + a + ” b:”+ b);
}
A.
Before, a:23 b:47
After, a:23 b:47
B.
Before, a:23 b:47
After, a:47 b:23
4) 输出结果是:(B 单个&是非短路运算所以即使&之前的第一个判断为false,&后的语句也要执行.c++是先运行后计算)
int a = 10;
int b = 5;
int c = 3;
if( a < b & c++ > 1) {
}
System.out.println(c++);
A. 3
B. 4
C. 5
D. 6
5) 输出结果是:(C)
int a = 10;
int b = a++ + ++a + a– + a–;
System.out.println(“a:” + a + ” b:” + b);
A. a:10 b:41
B. a:10 b:43
C. a:10 b:45
D. a:10 b:40
6) 以下结果返回true的是(多选 )(ABCE,CE是编译时优化,先拼接字符串后编译)
A. “hello” == “hello”
B. “hello”.equals(new String(“hello”))
C. final String a = “he”;
a + “llo” == “hello”;
D. String a = “he”;
a + “llo” == “hello”;
E. “he” + “llo” == “hello”;
7) 在主方法执行new B(),代码执行顺序正确的是:(C 有继承关系先看父类,类内有静态成员变量和静态代码块时优先
执行(静态代码块和静态成员变量的执行的顺序是依据他们的写入顺序执行谁在前面谁先执行),所以先执行1357;然后看
类内有构造代码块就先执行构造代码块,然后再执行类内的普通成员变量,所以是2468(当类内同时有构造代码块和构造方
法时,执行顺序:构造代码块优先于构造方法))
class C {
public C(String str) {
System.out.print(str);
}
}
class A{
static C c1 = new C(“1”);
C c2 = new C(“2”);
static {
new C(“3”);
}
public A(){
new C(“4”);
}
}
class B extends A{
static C c5 = new C(“5”);
C c6 = new C(“6”);
static {
new C(“7”);
}
public B(){
new C(“8”);
}
}
A. 12345678
B. 15372468
C. 13572468
D. 13572648
8) 执行完下述代码,遍历集合,打印结果为:(D Treeset集合可以保证值唯一 并且 可以进行排序,如果是整形就根据
大小排序,但这道题中要对字符串排序,因为唯一性所以存入了”10”,”11”,”9”,而字符串中的内容为整形所以应以第一位
的数字大小进行比较并排序所以排序结果为 10,11,9按升序排)
TreeSet set = new TreeSet<>();
set.add(“10”);
set.add(“11”);
set.add(“10”);
A. 9,10,11
B. 9,10,10,11
C. 10,11,10,9
D. 10,11,9
9) 执行完下述代码,遍历集合,打印value,结果为:(C ( TreeMap集合的特点是键值对应,不能存在重复的键,若出现
了则键不变第二次的值会覆盖第一次的值,所以该集合存入的值分别是 西安,北京市;而之后调用remove方法因为参数给
的是值不是键,所以找不到,相当于语句作废,又因为是treemap所以要进行排序,按照字典顺序 排所以是:北京市 西安);
Map String, String> map = new TreeMap<>();
map.put(“xi’an”, “西安”);
map.put(“beijing”, “北京”);
map.put(“beijing”, “北京市”);
map.remove(“西安”);
A. 西安 北京 北京市
B. 西安 北京市
C. 北京市 西安
D. 北京市
10) 执行完下述代码,遍历集合,结果为:( D return alen != blen ? blen - alen : a.compareTo(b);这个语句的
条件就是先根据字符串长度降序排序如果长度相同就根据字典顺序排序,则答案为D)
List list = new ArrayList();
list.add(“jerry”);
list.add(“tom”);
list.add(