JAVA面試題(2)

JAVA面試題(2)

1.對於以下,有int x = 5, y =6, z;z = ++x + y++;z的結果下面正確是是()

A:10
B:8
C:11
D:12

答案:D 解析:
++x ,y++ 將 x = 5, y =6帶入裏面 得到 6 ,6 所以結果爲12

2.代碼如下int a=5;int b=++a;int c=a+(++b),C的正確結果是()

A:11
B:13
C:10
D:12

答案 B
解析: a=5; b=++a; // 相當於a=a+1;b=a; 結果是a=6,b=6 int c=a+(++b) //先計算
++b =6+1=7; c=6+7=13; 這個主要是考察 自增的運算, ++在變量前面就是先讓變量+1 在運算;++在變量的後面就是 先運算。

3.下列運算符合法的是()

A.&&
B.<>
C.if
D.:=
答案:A
解析: Java 運算符可以分成以下
算術運算符,關係運算符,位運算符,邏輯運算符,賦值運算,其他運算符 經常提到的四大類爲算數運算符、關係運算符、邏輯運算符、位運算符。
算數運算符(9):+ – * / % ++ — 關係運算符(6):== != > >= < <= 邏輯運算符(6):&& || ! ^ &
| 位運算符(7):& | ~ ^ >> << >>> &&是在編程中使用的一種符號。是邏輯(條件)與。 java 中沒有<> :=
這種運算符,if else不算運算符

4.下列哪種說法是正確的( )

A. 實例方法可直接調用超類的實例方法
B. 實例方法可直接調用超類的類方法
C. 實例方法可直接調用其他類的實例方法
D.實例方法可直接調用本類的類方法
答案 D
解析: AC選項 如果方法是private 則不可以; B選項類父類的類方法是屬於父類本身的;
D選項雖然類方法可以類名.類方法來調用 但是new 該類 的實例方法去調也不不會報錯 ;
記住一句話:實例方法只能直接調用本類的方法,其他類的方法得需要引用調用

5. 計算2 << 3,下面正確的是()

A:6
B:54
C:8
D:16

答案D
解析: 2<<3; 表示 2向左移 3位:2 * 2^3(2的3次方) = 2 * 8; 因爲一個數左移 n位,就相當於 2的
n次方,那麼一個數乘以 8只要將其左移 3位即可,而爲運算符的效率最高,所以 2乘以 8等於幾的最有效方法是 2<<3。

6:提供Java存取數據庫能力的包是()

A.java.sql
B.java.awt
C.java.lang
D.java.swing

答案:A
解析 A存儲在數據源(通常是一個關係數據庫)中的數據的 API B
java.awt是一個軟件包,包含用於創建用戶界面和繪製圖形圖像的所有分類 C是提供利用 Java 編程語言進行程序設計的基礎類 D
Swing是一個用於開發Java應用程序用戶界面的開發工具包

7選擇下面代碼的運行結果:()

public class Test{
    public void method()
    {
        for(int i = ; i < 5; i++)
    {
            System.out.print(i);
    }
            System.out.print(i);
    }
}

A.122
B.123
C.編譯錯誤
D.沒有任何輸出
答案:C
解析: 本試題屬於 本身該試題就有嚴重的語法程序錯誤,並且沒有主方法。

8.下面程序的運行結果是()

String str1 = “banalan”;
String str2 = “bana” + new String(“lan”);
System.err.println(str1 == str2);

A:true
B:false
C:不確定
答案:B
解析 對於字符串,==比較引用對象的內存地址,equals比較的是字符串的內容
String str1 = “banalan”; //一個對象 String str2 = “bana” + new
String(“lan”); //new了一個對象,總的就是2個對象 System.err.println(str1 == str2);
// ==是比較引用,兩個對象的地址能一樣麼?只有重寫equals比較內容(值)才能爲TRUE

9.String能被繼承嗎?爲什麼?

不可以,因爲String類有final修飾符,而final修飾的類是不能被繼承的,實現細節不允許改變。平常我們定義的String
str=”a”;其實和String str=new String(“a”)還是有差異的。

前者默認調用的是String.valueOf來返回String實例對象,至於調用哪個則取決於你的賦值,比如String num=1,調用的是

public static String valueOf(int i) { 
return Integer.toString(i); 
}

後者則是調用如下部分:

public String(String original) { 
this.value = original.value; 
this.hash = original.hash; 
} 

最後我們的變量都存儲在一個char數組中
private final char value[];

10.String, Stringbuffer, StringBuilder 的區別?

String
字符串常量(final修飾,不可被繼承),String是常量,當創建之後即不能更改。(可以通過StringBuffer和StringBuilder創建String對象(常用的兩個字符串操作類)。)
StringBuffer
字符串變量(線程安全),其也是final類別的,不允許被繼承,其中的絕大多數方法都進行了同步處理,包括常用的Append方法也做了同步處理(synchronized修飾)。其自jdk1.0起就已經出現。其toString方法會進行對象緩存,以減少元素複製開銷。

public synchronized String toString() { 
if (toStringCache == null) { 
toStringCache = Arrays.copyOfRange(value, 0, count); 
} 
return new String(toStringCache, true); 
}

StringBuilder
字符串變量(非線程安全)其自jdk1.5起開始出現。與StringBuffer一樣都繼承和實現了同樣的接口和類,方法除了沒使用synch修飾以外基本一致,不同之處在於最後toString的時候,會直接返回一個新對象。

public String toString() { 
// Create a copy, don’t share the array 
return new String(value, 0, count); 
}

如果覺得我寫的還行,請關注我的公衆號,每天定時推送乾貨.
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章