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求和。