1注釋,有三種:
// 最常用的注釋
/* 較長的注釋*/
/** 自動生成的文檔注釋*/
2數(shù)據類型:
java有8種原始類型,其中4種整型,2種浮點型,char型,boolean型。所有數(shù)值類型都是有符號的.char沒有符號,但書中沒有提到boolean型是否有符號。
java并非完全面向對象,這8種類型就是非面向對象的,這是因為這8種類型很常用,為了提高程序效率而引用,它們不像java中的其它對象一樣是分配在堆中的,而是存儲在堆棧中。
注意,類型決定的是行為,而不是存儲大小,事實上byte和short的存儲都是32位的。不過,數(shù)組中的類型是例外,byte型的數(shù)組保證每個數(shù)組元素只占一個字節(jié)。
java為了實現(xiàn)跨平臺,在不同處理器下得到可重現(xiàn)的結果,所以嚴格定義數(shù)據類型的長度,如:在任何平臺下long總是64位。但這樣嚴格指定會損失性能,還有計算的精度(現(xiàn)在很多平臺的long是80位的)。在這種情況下,5.0提供了Strictfp修飾詞來修飾類和方法。被在修飾的類或方法進行的計算會嚴格指定數(shù)據類型,否則會根據平臺處理器的不同而進行計算。這算是一種折衷吧。
另外,在5.0中char不再使用Unicode編碼,而使用UTF-16。當然,UTF-16兼容Unicode。所以這不會對我們的編程產生什么太直觀的影響(我是這么認為的)。
我覺得需要注意的一點是:float不適合金融計算,如:2.0 - 1.1得到的結果是0.8999999999999999..因為float型在系統(tǒng)中是二進制表示的,就像十進行中1/3除不盡一樣,二進制中的1/10是除不盡的。
其它的沒什么好說的了,下面符兩張表:
Table 3-1. Java Integer Types
Type Storage Requirement Range (Inclusive)
Int 4 bytes –2,147,483,648 to 2,147,483, 647 (just over 2 billion)
Short 2 bytes –32,768 to 32,767
Long 8 bytes –9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
Byte 1 byte –128 to 127
Table 3-2. Floating-Point Types
Type Storage Requirement Range
float 4 bytes approximately ±3.40282347E+38F (6–7 significant decimal digits)
double 8 bytes approximately ±1.79769313486231570E+308 (15 significant decimal digits)
3操作符:
想一個問題,整數(shù)/0會得到什么,浮點數(shù)/0又會得到什么?前一個答案是異常,后一個答案是無窮或NaN.浮點型中定義了正無窮,負無窮,和NaN(not a number)三個常量.記住,在和他們進行比較的時候不能用“==”,有專門的方法isNaN()等。
java里面沒有什么奇特的操作符,大家都應該認識。需要注意的我想就是計算時數(shù)據類型間的轉換問題
如上圖,實線的轉換不會丟失數(shù)據,虛線的轉換可能會丟失數(shù)據,沿實線反向轉換也是可能會數(shù)據。
需要注意操作時會自動轉換,原則是:
有double類型的,都轉換為double類型;
有float類型的,都轉換為float類型;
有l(wèi)ong類型的,都轉換為long類型;
否則,兩個操作數(shù)都轉換為int類型。
例如,兩個byte進行操作,得到是操作結果是int類型的,這點一定要注意。
強制轉換:
意味著可能會丟失數(shù)據.關鍵是強制轉換后的結果:浮點向整形轉換是截取轉換,既去掉小數(shù)點;大類型向小類型轉換,是取模轉換,既對小類型的值域取模。
4 Sting:
String在java中不是一個原始類型,而是一個類。每個字符串都是這個類的一個實例。
我覺得對于String,應該注意的一點是:String是不可變的。你可以進行“+”或substring操作,但最終的結果是產生一個新的String對象,而以前的那個還在。這應該是個考點吧,很多題都和這個相關。對比一個StringBuffer,后者提供了很多對操作其值的方法。操作結果都體現(xiàn)在它自己身上,不會產生另一個StringBuffer對象。
由于上述原因,請注意比較兩個字符串是否相等時,不要使用“==”,而要使用equle()方法?!?=”只能判斷兩個字符串是否存儲在同一個地方.
String a = "abc";
if(a=="abc"){//很可能返回true}
if(a.substring(0,1)=="a"){//很可能返回false}
上述的判斷都不能確定。
5 輸入/輸出
在這里討論的輸入輸出,僅僅是討論簡單的對輸入的讀取和輸出的格式化。
// 最常用的注釋
/* 較長的注釋*/
/** 自動生成的文檔注釋*/
2數(shù)據類型:
java有8種原始類型,其中4種整型,2種浮點型,char型,boolean型。所有數(shù)值類型都是有符號的.char沒有符號,但書中沒有提到boolean型是否有符號。
java并非完全面向對象,這8種類型就是非面向對象的,這是因為這8種類型很常用,為了提高程序效率而引用,它們不像java中的其它對象一樣是分配在堆中的,而是存儲在堆棧中。
注意,類型決定的是行為,而不是存儲大小,事實上byte和short的存儲都是32位的。不過,數(shù)組中的類型是例外,byte型的數(shù)組保證每個數(shù)組元素只占一個字節(jié)。
java為了實現(xiàn)跨平臺,在不同處理器下得到可重現(xiàn)的結果,所以嚴格定義數(shù)據類型的長度,如:在任何平臺下long總是64位。但這樣嚴格指定會損失性能,還有計算的精度(現(xiàn)在很多平臺的long是80位的)。在這種情況下,5.0提供了Strictfp修飾詞來修飾類和方法。被在修飾的類或方法進行的計算會嚴格指定數(shù)據類型,否則會根據平臺處理器的不同而進行計算。這算是一種折衷吧。
另外,在5.0中char不再使用Unicode編碼,而使用UTF-16。當然,UTF-16兼容Unicode。所以這不會對我們的編程產生什么太直觀的影響(我是這么認為的)。
我覺得需要注意的一點是:float不適合金融計算,如:2.0 - 1.1得到的結果是0.8999999999999999..因為float型在系統(tǒng)中是二進制表示的,就像十進行中1/3除不盡一樣,二進制中的1/10是除不盡的。
其它的沒什么好說的了,下面符兩張表:
Table 3-1. Java Integer Types
Type Storage Requirement Range (Inclusive)
Int 4 bytes –2,147,483,648 to 2,147,483, 647 (just over 2 billion)
Short 2 bytes –32,768 to 32,767
Long 8 bytes –9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
Byte 1 byte –128 to 127
Table 3-2. Floating-Point Types
Type Storage Requirement Range
float 4 bytes approximately ±3.40282347E+38F (6–7 significant decimal digits)
double 8 bytes approximately ±1.79769313486231570E+308 (15 significant decimal digits)
3操作符:
想一個問題,整數(shù)/0會得到什么,浮點數(shù)/0又會得到什么?前一個答案是異常,后一個答案是無窮或NaN.浮點型中定義了正無窮,負無窮,和NaN(not a number)三個常量.記住,在和他們進行比較的時候不能用“==”,有專門的方法isNaN()等。
java里面沒有什么奇特的操作符,大家都應該認識。需要注意的我想就是計算時數(shù)據類型間的轉換問題
如上圖,實線的轉換不會丟失數(shù)據,虛線的轉換可能會丟失數(shù)據,沿實線反向轉換也是可能會數(shù)據。
需要注意操作時會自動轉換,原則是:
有double類型的,都轉換為double類型;
有float類型的,都轉換為float類型;
有l(wèi)ong類型的,都轉換為long類型;
否則,兩個操作數(shù)都轉換為int類型。
例如,兩個byte進行操作,得到是操作結果是int類型的,這點一定要注意。
強制轉換:
意味著可能會丟失數(shù)據.關鍵是強制轉換后的結果:浮點向整形轉換是截取轉換,既去掉小數(shù)點;大類型向小類型轉換,是取模轉換,既對小類型的值域取模。
4 Sting:
String在java中不是一個原始類型,而是一個類。每個字符串都是這個類的一個實例。
我覺得對于String,應該注意的一點是:String是不可變的。你可以進行“+”或substring操作,但最終的結果是產生一個新的String對象,而以前的那個還在。這應該是個考點吧,很多題都和這個相關。對比一個StringBuffer,后者提供了很多對操作其值的方法。操作結果都體現(xiàn)在它自己身上,不會產生另一個StringBuffer對象。
由于上述原因,請注意比較兩個字符串是否相等時,不要使用“==”,而要使用equle()方法?!?=”只能判斷兩個字符串是否存儲在同一個地方.
String a = "abc";
if(a=="abc"){//很可能返回true}
if(a.substring(0,1)=="a"){//很可能返回false}
上述的判斷都不能確定。
5 輸入/輸出
在這里討論的輸入輸出,僅僅是討論簡單的對輸入的讀取和輸出的格式化。

