1.請選擇下面程式碼正確的輸出選項(C)
public class Tests {
public static void main(String[] args) {
String f1 = “Study”;
String f2 = “Stu”+“dy”;
String f3 = “Stu”+new String(“dy”);
System。out。println(f1==f2);
System。out。println(f1==f3);
System。out。println(f2==f3);
}
}
A.
true,false,false
B.
false,true,false
C.
true,false,false
D.
true,true,false
解析:
眾所周知new出來的物件會被放到堆記憶體中,而“==”是對地址的比較。而如果是兩個字串“+”在編譯器就會合成一個字串相當於直接建立一個完整的字串。
2.下面關於構造器的說法正確的是(D)
A.
在一個類中構造器是不可以省略的
B.
構造器的名字必須與類名一致,而方法名不能和類名一致
C.
一個類只能定義一個構造器
D.
構造器在new物件是被執行
解析:
在類中構造器可以省略不寫,普通方法名是可以和類名一致的。類中可以建立多個建構函式。
3.當向集合中存放20個數據時 ArrayList arrayList 1= new ArrayList()和ArrayList arrayList2 = new ArrayList(16)這兩個集合分別擴容了(A)次
A.
2,1
B.
1,0
C.
1,1
D.
2,2
解析:
在沒有給定集合初始大小時new一個ArrayList相當於建立一個Object型別初始大小為10的陣列,所以arrayList 1需要進行擴容,每次的增量為原來的一半如果除不整向下整。所以arrayList1需要擴容2次。而arrayList2已經給定初始值16那麼它只需要擴容一次。
4.下面程式碼的輸出結果為(C)
public class Student {
private int age;
private String name;
public Student(String name){
this。name=name;
}
}
public class Test01{
public void changeAge(int age){
age = 20;
}
public void changeName(Student student){
student。setName(“GG”);
}
public void changeString(String string){
string=“NN”;
}
}
public class Test {
public static void main(String[] args) {
Test01 test01 = new Test01();
Student student = new Student(“gg”);
int age = 10;
String string = “nn”;
test01。changeAge(age);
test01。changeName(student);
test01。changeString(string);
System。out。println(age+“==”+student。getName()+“==”+string);
}
}
A.
20==gg==nn
B.
10==GG==nn
C .
10==GG==nn
D.
10==gg==NN
解析:
對於基本資料型別age而言,在類Test01的changeAge裡的age的作用域只是當前的changeAge方法如果你在個方法裡輸出age就是20,就相當於我透過方法的呼叫只是傳個值給你,你要怎麼修改並不會影響到我本身。
在java中只存在值的傳遞,但是在不是字串的引用資料型別中我們可以理解為引用的傳遞,對該引用(地址)指向的值的修改會影響到任何使用到他的地方。所以第二個會輸出GG。
對於字串而言,他一經建立值永不可變。所以對於字串而言一經修改就相當於建立了一個新的字串。再根據作用域的不同可知第三個輸出nn