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);
}
如果覺得我寫的還行,請關注我的公衆號,每天定時推送乾貨.