每天資訊java筆試題中的坑

菜單

java筆試題中的坑

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出來的物件會被放到堆記憶體中,而“==”是對地址的比較。而如果是兩個字串“+”在編譯器就會合成一個字串相當於直接建立一個完整的字串。

java筆試題中的坑

2.下面關於構造器的說法正確的是(D)

A.

在一個類中構造器是不可以省略的

B.

構造器的名字必須與類名一致,而方法名不能和類名一致

C.

一個類只能定義一個構造器

D.

構造器在new物件是被執行

解析:

在類中構造器可以省略不寫,普通方法名是可以和類名一致的。類中可以建立多個建構函式。

java筆試題中的坑

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那麼它只需要擴容一次。

java筆試題中的坑

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