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