java動手動腦和課後實驗型問題

  JAVA課後實驗和動手動腦java

   1.仔細閱讀示例: EnumTest.java,運行它,分析運行結果?測試

你能獲得什麼結論?你掌握了枚舉類型的基本用法了嗎?搜索引擎

public class EnumTest {spa

 

public static void main(String[] args) {3d

Size s=Size.SMALL;htm

Size t=Size.LARGE;對象

//s和t引用同一個對象?blog

System.out.println(s==t);  //索引

//是原始數據類型嗎?字符串

System.out.println(s.getClass().isPrimitive());

//從字符串中轉換

Size u=Size.valueOf("SMALL");

System.out.println(s==u);  //true

//列出它的全部值

for(Size value:Size.values()){

System.out.println(value);

}

}

 

}

 enum Size{SMALL,MEDIUM,LARGE};

 

 


實驗結論:枚舉類型是引用類型!
 

枚舉不屬於原始數據類型,它的每一個具體值都引用一個特定的對象。相同的值則引用同一個對象。可使用「==」和equals()方法直接比對枚舉變量的值,換句話說,對於枚舉類型的變量,「==」和equals()方法執行的結果是等價的。

 

 

 

2.閱讀相應教材,或者使用互聯網搜索引擎,弄清楚反碼、補碼跟原碼這幾個概念,而後編寫示例程序,對正數、負數進行各類位操做,觀察輸出結果,與手工計算的結果進行比對,看看Java中的數是採用上述哪一種碼錶示的?

原碼:所謂原碼就是二進制定點表示法,即最高位爲符號位,「0」表示正,「1」表示負,其他位表示數值的大小。

反碼錶示法規定:正數的反碼與其原碼相同;負數的反碼是對其原碼逐位取反,但符號位除外。

原碼10010= 反碼11101 (10010,1爲符號碼,故爲負)

(11101) 二進制= -2 十進制

補碼錶示法規定:正數的補碼與其原碼相同;負數的補碼是在其反碼的末位加1。

 

 

 

 

 3. Java變量遵循「同名變量的屏蔽原則」,請課後閱讀相關資料弄清楚相關知識,而後本身編寫一些測試代碼,就象本示例同樣,有意識地在不一樣地方定義一些同名變量,看看輸出的究竟是哪一個值?

public class Test {

 

/**

 * @param args

 */

private static int value=1;

public static void main(String[] args) {

// TODO Auto-generated method stub

        int value=2;

System.out.println(value);

}

 

}

輸出值爲2.

 

 

 

4.Java中的類型轉換

動手動腦: 看着這個圖,再查查Java中每一個數據類型所佔的位數,和表示數值的範圍,你能得出什麼結論?

 

1.Int          32位       取值範圍爲 -2的31次方到2的31次方減1之間的任意整數(-2147483648~2147483647)

2.Short       16位       取值範圍爲 -32768~32767之間的任意整數

3.long        64位       取值範圍爲 -2的63次方到2的63次方減1之間的任意整數         (-9223372036854774808~9223372036854774807)

4.float        32位       取值範圍爲 3.402823e+38 ~ 1.401298e-45

5.double      64位       取值範圍爲 1.797693e+308~ 4.9000000e-324

6.char        8位       取值範圍爲  -128~127

7.byte        8位       取值範圍爲 -128~127之間的任意整數

結論:不一樣數據類型進行類型轉換時可能會有精度的缺失,所以要注意各類類型的取值範圍。

 

 

 

 5.爲何double類型的數值進行運算得不到「數學上精確」的結果?

這個涉及到二進制與十進制的轉換問題。
  N進制能夠理解爲:數值×基數的冪,例如咱們熟悉的十進制數123.4=1×10²+2×10+3×(10的0次冪)+4×(10的-1次冪);其它進制的也是同理,例如二進制數11.01=1×2+1×(2的0次冪)+0+1×(2的-2次冪)=十進制的3.25。double類型的數值佔用64bit,即64個二進制數,除去最高位表示正負符號的位,在最低位上必定會與實際數據存在偏差(除非實際數據剛好是2的n次方)。
舉個例子來講,好比要用4bit來表示小數3.26,從高到低位依次對應2的1,0,-1,-2次冪,根據最上面的分析,應當在二進制數11.01(對應十進制的3.25)和11.10(對應十進制的3.5)之間選擇。
簡單來講就是咱們給出的數值,在大多數狀況下須要比64bit更多的位數才能準確表示出來(甚至是須要無窮多位),而double類型的數值只有64bit,後面捨去的位數必定會帶來偏差,沒法獲得「數學上精確」的結果。

 

 

6.如下代碼的輸出結果是什麼?

int X=100;

int Y=200;

System.out.println("X+Y="+X+Y);

System.out.println(X+Y+"=X+Y");

 

 

爲何會有這樣的輸出結果?

第一句輸出中「+」鏈接字面量,計算結果是將X和Y將兩數據鏈接。

語句二輸出中「+」是運算符,計算結果是對X和Y求和。

相關文章
相關標籤/搜索