【287天】我愛刷題系列046(2017.11.19)

叨叨兩句

  1. 把煩心事列出來,挨個給解決方案和時間期限,就沒問題叻~java

牛客網——java專項練習026

1

下面賦值語句中正確的是()
正確答案: A線程

  1. double d=5.3e12;code

  2. float f=11.1;對象

  3. int i=0.0;內存

  4. 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);

2

有如下代碼: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

  1. falseio

  2. true編譯

  3. 報錯

  4. 以上選項都不正確

答案爲 false  由於== 表示的是否指向的是同一個內存。

 System.out.println(classa.equals(classb));   若是這這樣輸出 答案也是錯誤的 由於子類沒有覆蓋Object
的equals()方法,而默認調用==的這個方法   判斷兩個對象是否相等須要覆蓋equals()方法和hashcaode()方法

3

假設以下代碼中,若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

  1. Thread 1 wake up
    Thread 2 sent notify.

  2. Thread 2 sent notify.
    Thread 1 wake up

  3. A、B皆有可能

  4. 程序無輸出卡死

notify()就是對對象鎖的喚醒操做。但有一點須要注意的是notify()調用後,並非立刻就釋放對象鎖的,而是在相應的synchronized(){}語句塊執行結束,自動釋放鎖後,JVM會在wait()對象鎖的線程中隨機選取一線程,賦予其對象鎖,喚醒線程,繼續執行。這樣就提供了在線程間同步、喚醒的操做。

4

Integer i = 42;
Long l = 42l;
Double d = 42.0;
下面爲true的是
正確答案: G

  1. (i == l)

  2. (i == d)

  3. (l == d)

  4. i.equals(d)

  5. d.equals(l)

  6. i.equals(l)

  7. 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);
相關文章
相關標籤/搜索