把煩心事列出來,挨個給解決方案和時間期限,就沒問題叻~java
下面賦值語句中正確的是()
正確答案: A線程
double d=5.3e12;code
float f=11.1;對象
int i=0.0;內存
Double oD=3;同步
java中整型默認的是int,浮點默認的是double. B: double類型的11.1 轉成 float,是須要強制轉換的 C: double類型的0.0 轉成 int,也是須要強制轉換的 D: int 轉爲 封裝類型Double,是沒法編譯的 Double oD = 3.0, 會把double類型的3.0自動裝箱爲Double,沒有問題
double d1 = 3E12; double d2 = 3.0E12; double d3 = 3e12; double d4 = 3.0e12; //如下打印結果均爲3.0E12 System.out.println(d1); System.out.println(d2); System.out.println(d3); System.out.println(d4);
有如下代碼:hash
class A{ public A(String str){ } } public class Test{ public static void main(String[] args) { A classa=new A("he"); A classb=new A("he"); System.out.println(classa==classb); } }
請問輸出的結果是:
正確答案: Ait
falseio
true編譯
報錯
以上選項都不正確
答案爲 false 由於== 表示的是否指向的是同一個內存。 System.out.println(classa.equals(classb)); 若是這這樣輸出 答案也是錯誤的 由於子類沒有覆蓋Object 的equals()方法,而默認調用==的這個方法 判斷兩個對象是否相等須要覆蓋equals()方法和hashcaode()方法
假設以下代碼中,若t1線程在t2線程啓動以前已經完成啓動。代碼的輸出是()
public static void main(String[]args)throws Exception { final Object obj = new Object(); Thread t1 = new Thread() { public void run() { synchronized (obj) { try { obj.wait(); System.out.println("Thread 1 wake up."); } catch (InterruptedException e) { } } } }; t1.start(); Thread.sleep(1000);//We assume thread 1 must start up within 1 sec. Thread t2 = new Thread() { public void run() { synchronized (obj) { obj.notifyAll(); System.out.println("Thread 2 sent notify."); } } }; t2.start(); }
正確答案: B
Thread 1 wake up
Thread 2 sent notify.
Thread 2 sent notify.
Thread 1 wake up
A、B皆有可能
程序無輸出卡死
notify()就是對對象鎖的喚醒操做。但有一點須要注意的是notify()調用後,並非立刻就釋放對象鎖的,而是在相應的synchronized(){}語句塊執行結束,自動釋放鎖後,JVM會在wait()對象鎖的線程中隨機選取一線程,賦予其對象鎖,喚醒線程,繼續執行。這樣就提供了在線程間同步、喚醒的操做。
Integer i = 42;
Long l = 42l;
Double d = 42.0;
下面爲true的是
正確答案: G
(i == l)
(i == d)
(l == d)
i.equals(d)
d.equals(l)
i.equals(l)
l.equals(42L)
包裝類的「==」運算在不遇到算術運算的狀況下不會自動拆箱 包裝類的equals()方法不處理數據轉型
ABC3 個選項很明顯,不一樣類型引用的 == 比較,會出現編譯錯誤,不能比較。 DEF 調用 equals 方法,由於此方法先是比較類型,而 i , d , l 是不一樣的類型,因此返回假。 選項 G ,會自動裝箱,將 42L 裝箱成 Long 類型,因此調用 equals 方法時,類型相同,且值也相同,所以返回真。
int i = 2; long k = 2l; double j = 2.0; //如下結果都爲true System.out.println(i==j); System.out.println(k==j); System.out.println(i==k);