课堂作业2
1、動手動腦
閱讀示例: EnumTest.java,運行它,分析運行結果?你能得到什么結論?你掌握了枚舉類型的基本用法了嗎?
public class EnumTest {public static void main(String[] args) {Size s=Size.SMALL;Size t=Size.LARGE;//s和t引用同一個對象?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};運行結果:
false
false
true
SMALL
MEDIUM
LARGE
結論:枚舉類型是引用類型,不屬于原始數據類型,它的每個具體值都引用一個特定的對象,相同的值則引用同一個對象。可以使用“==”和equals()方法直接比對枚舉變量的值,換句話說,對于枚舉類型的變量,==”和equals()方法執行的結果是等價的。
枚舉類型的定義格式為:????
??enum???<枚舉類型名>???{<枚舉表>};????
??它是一條枚舉類型定義語句,該語句以enum保留字開始,接著為枚舉類型名,它是用戶命名的一個標識符,以后就直接使用它表示該類型,枚舉類型名后為該類型的定義體,它是由一對花括號和其中的枚舉表所組成,枚舉表為一組用逗號分開的由用戶命名的符號常量,每個符號常量又稱為枚舉常量或枚舉值。
枚舉類型不屬于原始數據類型,他的每個具體值都引用一個特定的對象,相同的值則引用同一個對象,枚舉是可以從字符串中轉換的。
2、動手動腦
閱讀相應教材,或者使用互聯網搜索引擎,弄清楚反碼、補碼跟原碼這幾個概念,然后編寫示例程序,對正數、負數進行各種位操作,觀察輸出結果,與手工計算的結果進行比對,看看Java中的數是采用上述哪種碼表示的。
原碼:一般將數的二進制位最高位表示符號,對正數,該位取0,對負數,該位取1。而數值部分保持數的原有形式。這樣所得結果為該數的原碼表示。
反碼:對于正數,其反碼與原碼相同,也與補碼相同。對于負數,其反碼等于原碼除符號位外,按位求反。
補碼:對正數,補碼同原碼。對負數,負數的補碼等于其原碼除符號位外按位“求反”(1變0,0變1),末位再加1。
例,x=+1001010,y= -1001010,z= -1110(= -0001110)。當原碼為8位時,x、y和z的原碼分別是:
[x]原=01001010;
[y]原=11001010;
[Z]原=10001110.
例如,x=+0101001,[x]補=[x]原=00101001
例如,y=-0001100,[y]原=10001100,[Y]補=11110011+1=11110100。
?
package n; public class ceshi {public static void main(String[] args) {int m1=2;int m2=-2;System.out.println(Integer.toBinaryString(m1));System.out.println(Integer.toBinaryString(m2)); } } 運行結果: 10 11111111111111111111111111111110?
在Java中,二進制正數采用原碼,負數采用補碼。
?
3、動手實驗
請運行以下代碼(TestDouble.java)
?
package mm; public class TestDouble {public static void main(String args[]) {System.out.println("0.05 + 0.01 = " + (0.05 + 0.01));System.out.println("1.0 - 0.42 = " + (1.0 - 0.42));System.out.println("4.015 * 100 = " + (4.015 * 100));System.out.println("123.3 / 100 = " + (123.3 / 100));} } 運行結果: 0.05 + 0.01 = 0.060000000000000005 1.0 - 0.42 = 0.5800000000000001 4.015 * 100 = 401.49999999999994 123.3 / 100 = 1.2329999999999999?
使用double類型的數值進行計算,?其結果為什么不是精確的?
我們給出的數值,在大多數情況下需要比64bit更多的位數才能準確表示出來(甚至是需要無窮多位),而double類型的數值只有64bit,后面舍去的位數一定會帶來誤
差,無法得到“數學上精確”的結果。
4、動手動腦
以下代碼的輸出結果是什么?
package n; public class ceshi{public static void main(String[] args) {int X=100;int Y=200;System.out.println("X+Y="+X+Y);System.out.println(X+Y+"=X+Y");} } 運行結果: X+Y=100200 300=X+Y為什么會有這樣的輸出結果?
在Java中,如果在string字符串后面是+和變量,會把變量轉換成string類型,加號起連接作用,然后把兩個字符串連接成一個新的字符串輸出。如果先有變量的加減運算再有字符串,那么會先從左到右先計算變量的加減運算,輸出運算結果。
5、動腦動手:
運行下述代碼,輸出結果是什么?
package n; public class ceshi {private static int value=1;public static void main(String[] args) {int value=2;System.out.println(value); } } 運行結果: 2Java變量遵循“同名變量的屏蔽原則”,請課后閱讀相關資料弄清楚相關知識,然后自己編寫一些測試代碼,就像本示例一樣,有意識地在不同地方定義一些同名變量,看看輸出的到底是哪個值。
public class ceshi {
private static int a = 1;
public static void main(String[] args) {
int a = 2;
System.out.println(a);
}
}
結果:
2
轉載于:https://www.cnblogs.com/--lzx1--/p/11552673.html
總結
- 上一篇: 位运算实现加减乘除四则运算(Java)
- 下一篇: centos7安装openjdk8