版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、java基本類型,或者叫做內(nèi)置類型,是JAVA中不同于類的特殊類型。它們是我們編程中使用最頻繁的類型,因此面試題中也總少不了它們的身影,在這篇文章中我們將從面試中??嫉膸讉€方面來回顧一下與基本類型相關(guān)的知識。 基本類型共有九種,它們分別都有相對應(yīng)的包裝類。對于基本類型void以及它的包裝類java.lang.Void,我們都無法直接進行操作?;绢愋涂梢苑譃槿?,字符類型char,布爾類型boolean以及數(shù)值類型byte、short、int、long、float、double。數(shù)值類型又可以分為整數(shù)類型byte、short、int、long和浮點數(shù)類型float、double。JAVA中的數(shù)
2、值類型不存在無符號的,它們的取值范圍是固定的,不會隨著機器硬件環(huán)境或者操作系統(tǒng)的改變而改變。對于數(shù)值類型的基本類型的取值范圍,我們無需強制去記憶,因為它們的值都已經(jīng)以常量的形式定義在對應(yīng)的包裝類中了。請看下面的例子:Java代碼 1. public class PrimitiveTypeTest 2. public static void main(String args) 3. / byte 4. System.out.println(基本類型:byte 二進制位數(shù): + Byte.SIZE); 5. System.out.println(包裝類:java.lang.Byte); 6. Sy
3、stem.out.println(最小值:Byte.MIN_VALUE= + Byte.MIN_VALUE); 7. System.out.println(最大值:Byte.MAX_VALUE= + Byte.MAX_VALUE); 8. System.out.println(); 9.10. / short 11. System.out.println(基本類型:short 二進制位數(shù): + Short.SIZE); 12. System.out.println(包裝類:java.lang.Short); 13. System.out.println(最小值:Short.MIN_VALUE=
4、 + Short.MIN_VALUE); 14. System.out.println(最大值:Short.MAX_VALUE= + Short.MAX_VALUE); 15. System.out.println(); 16.17. / int 18. System.out.println(基本類型:int 二進制位數(shù): + Integer.SIZE); 19. System.out.println(包裝類:java.lang.Integer); 20. System.out.println(最小值:Integer.MIN_VALUE= + Integer.MIN_VALUE); 21. S
5、ystem.out.println(最大值:Integer.MAX_VALUE= + Integer.MAX_VALUE); 22. System.out.println(); 23.24. / long 25. System.out.println(基本類型:long 二進制位數(shù): + Long.SIZE); 26. System.out.println(包裝類:java.lang.Long); 27. System.out.println(最小值:Long.MIN_VALUE= + Long.MIN_VALUE); 28. System.out.println(最大值:Long.MAX_V
6、ALUE= + Long.MAX_VALUE); 29. System.out.println(); 30.31. / float 32. System.out.println(基本類型:float 二進制位數(shù): + Float.SIZE); 33. System.out.println(包裝類:java.lang.Float); 34. System.out.println(最小值:Float.MIN_VALUE= + Float.MIN_VALUE); 35. System.out.println(最大值:Float.MAX_VALUE= + Float.MAX_VALUE); 36. S
7、ystem.out.println(); 37.38. / double 39. System.out.println(基本類型:double 二進制位數(shù): + Double.SIZE); 40. System.out.println(包裝類:java.lang.Double); 41. System.out.println(最小值:Double.MIN_VALUE= + Double.MIN_VALUE); 42. System.out.println(最大值:Double.MAX_VALUE= + Double.MAX_VALUE); 43. System.out.println(); 4
8、4.45. / char 46. System.out.println(基本類型:char 二進制位數(shù): + Character.SIZE); 47. System.out.println(包裝類:java.lang.Character); 48. / 以數(shù)值形式而不是字符形式將Character.MIN_VALUE輸出到控制臺 49. System.out.println(最小值:Character.MIN_VALUE= 50. + (int) Character.MIN_VALUE); 51. / 以數(shù)值形式而不是字符形式將Character.MAX_VALUE輸出到控制臺 52. Sys
9、tem.out.println(最大值:Character.MAX_VALUE= 53. + (int) Character.MAX_VALUE); 54. 55. Java代碼 1. public class PrimitiveTypeTest 2. public static void main(String args) 3. / byte 4. System.out.println(基本類型:byte 二進制位數(shù): + Byte.SIZE); 5. System.out.println(包裝類:java.lang.Byte); 6. System.out.println(最小值:Byte
10、.MIN_VALUE= + Byte.MIN_VALUE); 7. System.out.println(最大值:Byte.MAX_VALUE= + Byte.MAX_VALUE); 8. System.out.println(); 9.10. / short 11. System.out.println(基本類型:short 二進制位數(shù): + Short.SIZE); 12. System.out.println(包裝類:java.lang.Short); 13. System.out.println(最小值:Short.MIN_VALUE= + Short.MIN_VALUE); 14.
11、System.out.println(最大值:Short.MAX_VALUE= + Short.MAX_VALUE); 15. System.out.println(); 16.17. / int 18. System.out.println(基本類型:int 二進制位數(shù): + Integer.SIZE); 19. System.out.println(包裝類:java.lang.Integer); 20. System.out.println(最小值:Integer.MIN_VALUE= + Integer.MIN_VALUE); 21. System.out.println(最大值:Int
12、eger.MAX_VALUE= + Integer.MAX_VALUE); 22. System.out.println(); 23.24. / long 25. System.out.println(基本類型:long 二進制位數(shù): + Long.SIZE); 26. System.out.println(包裝類:java.lang.Long); 27. System.out.println(最小值:Long.MIN_VALUE= + Long.MIN_VALUE); 28. System.out.println(最大值:Long.MAX_VALUE= + Long.MAX_VALUE);
13、29. System.out.println(); 30.31. / float 32. System.out.println(基本類型:float 二進制位數(shù): + Float.SIZE); 33. System.out.println(包裝類:java.lang.Float); 34. System.out.println(最小值:Float.MIN_VALUE= + Float.MIN_VALUE); 35. System.out.println(最大值:Float.MAX_VALUE= + Float.MAX_VALUE); 36. System.out.println(); 37.3
14、8. / double 39. System.out.println(基本類型:double 二進制位數(shù): + Double.SIZE); 40. System.out.println(包裝類:java.lang.Double); 41. System.out.println(最小值:Double.MIN_VALUE= + Double.MIN_VALUE); 42. System.out.println(最大值:Double.MAX_VALUE= + Double.MAX_VALUE); 43. System.out.println(); 44.45. / char 46. System.o
15、ut.println(基本類型:char 二進制位數(shù): + Character.SIZE); 47. System.out.println(包裝類:java.lang.Character); 48. / 以數(shù)值形式而不是字符形式將Character.MIN_VALUE輸出到控制臺 49. System.out.println(最小值:Character.MIN_VALUE= 50. + (int) Character.MIN_VALUE); 51. / 以數(shù)值形式而不是字符形式將Character.MAX_VALUE輸出到控制臺 52. System.out.println(最大值:Chara
16、cter.MAX_VALUE= 53. + (int) Character.MAX_VALUE); 54. 55. public class PrimitiveTypeTest public static void main(String args) / byteSystem.out.println(基本類型:byte 二進制位數(shù): + Byte.SIZE);System.out.println(包裝類:java.lang.Byte);System.out.println(最小值:Byte.MIN_VALUE= + Byte.MIN_VALUE);System.out.println(最大值:
17、Byte.MAX_VALUE= + Byte.MAX_VALUE);System.out.println();/ shortSystem.out.println(基本類型:short 二進制位數(shù): + Short.SIZE);System.out.println(包裝類:java.lang.Short);System.out.println(最小值:Short.MIN_VALUE= + Short.MIN_VALUE);System.out.println(最大值:Short.MAX_VALUE= + Short.MAX_VALUE);System.out.println();/ intSys
18、tem.out.println(基本類型:int 二進制位數(shù): + Integer.SIZE);System.out.println(包裝類:java.lang.Integer);System.out.println(最小值:Integer.MIN_VALUE= + Integer.MIN_VALUE);System.out.println(最大值:Integer.MAX_VALUE= + Integer.MAX_VALUE);System.out.println();/ longSystem.out.println(基本類型:long 二進制位數(shù): + Long.SIZE);System.o
19、ut.println(包裝類:java.lang.Long);System.out.println(最小值:Long.MIN_VALUE= + Long.MIN_VALUE);System.out.println(最大值:Long.MAX_VALUE= + Long.MAX_VALUE);System.out.println();/ floatSystem.out.println(基本類型:float 二進制位數(shù): + Float.SIZE);System.out.println(包裝類:java.lang.Float);System.out.println(最小值:Float.MIN_VAL
20、UE= + Float.MIN_VALUE);System.out.println(最大值:Float.MAX_VALUE= + Float.MAX_VALUE);System.out.println();/ doubleSystem.out.println(基本類型:double 二進制位數(shù): + Double.SIZE);System.out.println(包裝類:java.lang.Double);System.out.println(最小值:Double.MIN_VALUE= + Double.MIN_VALUE);System.out.println(最大值:Double.MAX_
21、VALUE= + Double.MAX_VALUE);System.out.println();/ charSystem.out.println(基本類型:char 二進制位數(shù): + Character.SIZE);System.out.println(包裝類:java.lang.Character);/ 以數(shù)值形式而不是字符形式將Character.MIN_VALUE輸出到控制臺System.out.println(最小值:Character.MIN_VALUE=+ (int) Character.MIN_VALUE);/ 以數(shù)值形式而不是字符形式將Character.MAX_VALUE輸出
22、到控制臺System.out.println(最大值:Character.MAX_VALUE=+ (int) Character.MAX_VALUE);運行結(jié)果:1. 基本類型:byte 二進制位數(shù):8 2. 包裝類:java.lang.Byte 3. 最小值:Byte.MIN_VALUE=-128 4. 最大值:Byte.MAX_VALUE=127 5. 基本類型:short 二進制位數(shù):16 6. 包裝類:java.lang.Short 7. 最小值:Short.MIN_VALUE=-32768 8. 最大值:Short.MAX_VALUE=32767 9. 基本類型:int 二進制位數(shù):
23、32 10. 包裝類:java.lang.Integer 11. 最小值:Integer.MIN_VALUE=-2147483648 12. 最大值:Integer.MAX_VALUE=2147483647 13. 基本類型:long 二進制位數(shù):64 14. 包裝類:java.lang.Long 15. 最小值:Long.MIN_VALUE=-9223372036854775808 16. 最大值:Long.MAX_VALUE=9223372036854775807 17. 基本類型:float 二進制位數(shù):32 18. 包裝類:java.lang.Float 19. 最小值:Float.M
24、IN_VALUE=1.4E-45 20. 最大值:Float.MAX_VALUE=3.4028235E38 21. 基本類型:double 二進制位數(shù):64 22. 包裝類:java.lang.Double 23. 最小值:Double.MIN_VALUE=4.9E-324 24. 最大值:Double.MAX_VALUE=1.7976931348623157E308 25. 基本類型:char 二進制位數(shù):16 26. 包裝類:java.lang.Character 27. 最小值:Character.MIN_VALUE=0 28. 最大值:Character.MAX_VALUE=65535
25、 Float和Double的最小值和最大值都是以科學(xué)記數(shù)法的形式輸出的,結(jié)尾的“E+數(shù)字”表示E之前的數(shù)字要乘以10的多少倍。比如3.14E3就是3.141000=3140,3.14E-3就是3.14/1000=0.00314。 大家將運行結(jié)果與上表信息仔細比較就會發(fā)現(xiàn)float、double兩種類型的最小值與Float.MIN_VALUE、Double.MIN_VALUE的值并不相同,這是為什么呢?實際上Float.MIN_VALUE和Double.MIN_VALUE分別指的是float和double類型所能表示的最小正數(shù)。也就是說存在這樣一種情況,0到Float.MIN_VALUE之間的值
26、float類型無法表示,0到Double.MIN_VALUE之間的值double類型無法表示。這并沒有什么好奇怪的,因為這些范圍內(nèi)的數(shù)值超出了它們的精度范圍。 基本類型存儲在棧中,因此它們的存取速度要快于存儲在堆中的對應(yīng)包裝類的實例對象。從Java5.0(1.5)開始,JAVA虛擬機(Java Virtual Machine)可以完成基本類型和它們對應(yīng)包裝類之間的自動轉(zhuǎn)換。因此我們在賦值、參數(shù)傳遞以及數(shù)學(xué)運算的時候像使用基本類型一樣使用它們的包裝類,但這并不意味著你可以通過基本類型調(diào)用它們的包裝類才具有的方法。另外,所有基本類型(包括void)的包裝類都使用了final修飾,因此我們無法繼承它
27、們擴展新的類,也無法重寫它們的任何方法。 各種數(shù)值類型之間的賦值與轉(zhuǎn)換遵循什么規(guī)律呢?我們來看下面這個例子:Java代碼 1. public class PrimitiveTypeTest 2. public static void main(String args) 3. / 給byte類型變量賦值時,數(shù)字后無需后綴標識 4. byte byte_a = 1; 5. / 編譯器會做范圍檢查,如果賦予的值超出了范圍就會報錯 6. / byte byte_b = 1000; 7. / 把一個long型值賦值給byte型變量,編譯時會報錯,即使這個值沒有超出byte類型的取值范圍 8. / byt
28、e byte_c = 1L; 9.10. / 給short類型變量賦值時,數(shù)字后無需后綴標識 11. short short_a = 1; 12. / 編譯器會做范圍檢查,如果賦予的值超出了范圍就會報錯 13. / short short_b = 70000; 14. / 把一個long型值賦值給short型變量,編譯時會報錯,即使這個值沒有超出short類型的取值范圍 15. / byte short_c = 1L; 16.17. / 給short類型變量賦值時,數(shù)字后無需后綴標識 18. int int_a = 1; 19. / 編譯器會做范圍檢查,如果賦予的值超出了范圍就會報錯 20.
29、/ int int_b = 2200000000; 21. / 把一個long型值賦值給int型變量,編譯時會報錯,即使這個值沒有超出int類型的取值范圍 22. / int int_c = 1L; 23.24. / 可以把一個int型值直接賦值給long型變量,數(shù)字后無需后綴標識 25. long long_a = 1; 26. / 如果給long型變量賦予的值超出了int型值的范圍,數(shù)字后必須加L(不區(qū)分大小寫)標識 27. long long_b = 2200000000L; 28. / 編譯器會做范圍檢查,如果賦予的值超出了范圍就會報錯 29. / long long_c = 9300
30、000000000000000L; 30.31. / 可以把一個int型值直接賦值給float型變量 32. float float_a = 1; 33. / 可以把一個long型值直接賦值給float型變量 34. float float_b = 1L; 35. / 沒有F(不區(qū)分大小寫)后綴標識的浮點數(shù)默認為double型的,不能將它直接賦值給float型變量 36. / float float_c = 1.0; 37. / float型數(shù)值需要有一個F(不區(qū)分大小寫)后綴標識 38. float float_d = 1.0F; 39. / 把一個double型值賦值給float型變量,編
31、譯時會報錯,即使這個值沒有超出float類型的取值范圍 40. / float float_e = 1.0D; 41. / 編譯器會做范圍檢查,如果賦予的值超出了范圍就會報錯 42. / float float_f = 3.5000000E38F; 43.44. / 可以把一個int型值直接賦值給double型變量 45. double double_a = 1; 46. / 可以把一個long型值直接賦值給double型變量 47. double double_b = 1L; 48. / 可以把一個float型值直接賦值給double型變量 49. double double_c = 1F;
32、 50. / 不帶后綴標識的浮點數(shù)默認為double類型的,可以直接賦值 51. double double_d = 1.0; 52. / 也可以給數(shù)字增加一個D(不區(qū)分大小寫)后綴標識,明確標出它是double類型的 53. double double_e = 1.0D; 54. / 編譯器會做范圍檢查,如果賦予的值超出了范圍就會報錯 55. / double double_f = 1.8000000000000000E308D; 56.57. / 把一個double型值賦值給一個byte類型變量,編譯時會報錯,即使這個值沒有超出byte類型的取值范圍 58. / byte byte_d =
33、 1.0D; 59. / 把一個double型值賦值給一個short類型變量,編譯時會報錯,即使這個值沒有超出short類型的取值范圍 60. / short short_d = 1.0D; 61. / 把一個double型值賦值給一個int類型變量,編譯時會報錯,即使這個值沒有超出int類型的取值范圍 62. / int int_d = 1.0D; 63. / 把一個double型值賦值給一個long類型變量,編譯時會報錯,即使這個值沒有超出long類型的取值范圍 64. / long long_d = 1.0D; 65.66. / 可以用字符初始化一個char型變量 67. char ch
34、ar_a = a; 68. / 也可以用一個int型數(shù)值初始化char型變量 69. char char_b = 1; 70. / 把一個long型值賦值給一個char類型變量,編譯時會報錯,即使這個值沒有超出char類型的取值范圍 71. / char char_c = 1L; 72. / 把一個float型值賦值給一個char類型變量,編譯時會報錯,即使這個值沒有超出char類型的取值范圍 73. / char char_d = 1.0F; 74. / 把一個double型值賦值給一個char類型變量,編譯時會報錯,即使這個值沒有超出char類型的取值范圍 75. / char char_
35、e = 1.0D; 76. / 編譯器會做范圍檢查,如果賦予的值超出了范圍就會報錯 77. / char char_f = 70000; 78. 79. Java代碼 1. public class PrimitiveTypeTest 2. public static void main(String args) 3. / 給byte類型變量賦值時,數(shù)字后無需后綴標識 4. byte byte_a = 1; 5. / 編譯器會做范圍檢查,如果賦予的值超出了范圍就會報錯 6. / byte byte_b = 1000; 7. / 把一個long型值賦值給byte型變量,編譯時會報錯,即使這個值沒
36、有超出byte類型的取值范圍 8. / byte byte_c = 1L; 9.10. / 給short類型變量賦值時,數(shù)字后無需后綴標識 11. short short_a = 1; 12. / 編譯器會做范圍檢查,如果賦予的值超出了范圍就會報錯 13. / short short_b = 70000; 14. / 把一個long型值賦值給short型變量,編譯時會報錯,即使這個值沒有超出short類型的取值范圍 15. / byte short_c = 1L; 16.17. / 給short類型變量賦值時,數(shù)字后無需后綴標識 18. int int_a = 1; 19. / 編譯器會做范圍
37、檢查,如果賦予的值超出了范圍就會報錯 20. / int int_b = 2200000000; 21. / 把一個long型值賦值給int型變量,編譯時會報錯,即使這個值沒有超出int類型的取值范圍 22. / int int_c = 1L; 23.24. / 可以把一個int型值直接賦值給long型變量,數(shù)字后無需后綴標識 25. long long_a = 1; 26. / 如果給long型變量賦予的值超出了int型值的范圍,數(shù)字后必須加L(不區(qū)分大小寫)標識 27. long long_b = 2200000000L; 28. / 編譯器會做范圍檢查,如果賦予的值超出了范圍就會報錯 2
38、9. / long long_c = 9300000000000000000L; 30.31. / 可以把一個int型值直接賦值給float型變量 32. float float_a = 1; 33. / 可以把一個long型值直接賦值給float型變量 34. float float_b = 1L; 35. / 沒有F(不區(qū)分大小寫)后綴標識的浮點數(shù)默認為double型的,不能將它直接賦值給float型變量 36. / float float_c = 1.0; 37. / float型數(shù)值需要有一個F(不區(qū)分大小寫)后綴標識 38. float float_d = 1.0F; 39. / 把
39、一個double型值賦值給float型變量,編譯時會報錯,即使這個值沒有超出float類型的取值范圍 40. / float float_e = 1.0D; 41. / 編譯器會做范圍檢查,如果賦予的值超出了范圍就會報錯 42. / float float_f = 3.5000000E38F; 43.44. / 可以把一個int型值直接賦值給double型變量 45. double double_a = 1; 46. / 可以把一個long型值直接賦值給double型變量 47. double double_b = 1L; 48. / 可以把一個float型值直接賦值給double型變量 49
40、. double double_c = 1F; 50. / 不帶后綴標識的浮點數(shù)默認為double類型的,可以直接賦值 51. double double_d = 1.0; 52. / 也可以給數(shù)字增加一個D(不區(qū)分大小寫)后綴標識,明確標出它是double類型的 53. double double_e = 1.0D; 54. / 編譯器會做范圍檢查,如果賦予的值超出了范圍就會報錯 55. / double double_f = 1.8000000000000000E308D; 56.57. / 把一個double型值賦值給一個byte類型變量,編譯時會報錯,即使這個值沒有超出byte類型的取
41、值范圍 58. / byte byte_d = 1.0D; 59. / 把一個double型值賦值給一個short類型變量,編譯時會報錯,即使這個值沒有超出short類型的取值范圍 60. / short short_d = 1.0D; 61. / 把一個double型值賦值給一個int類型變量,編譯時會報錯,即使這個值沒有超出int類型的取值范圍 62. / int int_d = 1.0D; 63. / 把一個double型值賦值給一個long類型變量,編譯時會報錯,即使這個值沒有超出long類型的取值范圍 64. / long long_d = 1.0D; 65.66. / 可以用字符初
42、始化一個char型變量 67. char char_a = a; 68. / 也可以用一個int型數(shù)值初始化char型變量 69. char char_b = 1; 70. / 把一個long型值賦值給一個char類型變量,編譯時會報錯,即使這個值沒有超出char類型的取值范圍 71. / char char_c = 1L; 72. / 把一個float型值賦值給一個char類型變量,編譯時會報錯,即使這個值沒有超出char類型的取值范圍 73. / char char_d = 1.0F; 74. / 把一個double型值賦值給一個char類型變量,編譯時會報錯,即使這個值沒有超出char類
43、型的取值范圍 75. / char char_e = 1.0D; 76. / 編譯器會做范圍檢查,如果賦予的值超出了范圍就會報錯 77. / char char_f = 70000; 78. 79. public class PrimitiveTypeTest public static void main(String args) / 給byte類型變量賦值時,數(shù)字后無需后綴標識byte byte_a = 1;/ 編譯器會做范圍檢查,如果賦予的值超出了范圍就會報錯/ byte byte_b = 1000;/ 把一個long型值賦值給byte型變量,編譯時會報錯,即使這個值沒有超出byte類型
44、的取值范圍/ byte byte_c = 1L;/ 給short類型變量賦值時,數(shù)字后無需后綴標識short short_a = 1;/ 編譯器會做范圍檢查,如果賦予的值超出了范圍就會報錯/ short short_b = 70000;/ 把一個long型值賦值給short型變量,編譯時會報錯,即使這個值沒有超出short類型的取值范圍/ byte short_c = 1L;/ 給short類型變量賦值時,數(shù)字后無需后綴標識int int_a = 1;/ 編譯器會做范圍檢查,如果賦予的值超出了范圍就會報錯/ int int_b = 2200000000;/ 把一個long型值賦值給int型變量
45、,編譯時會報錯,即使這個值沒有超出int類型的取值范圍/ int int_c = 1L;/ 可以把一個int型值直接賦值給long型變量,數(shù)字后無需后綴標識long long_a = 1;/ 如果給long型變量賦予的值超出了int型值的范圍,數(shù)字后必須加L(不區(qū)分大小寫)標識long long_b = 2200000000L;/ 編譯器會做范圍檢查,如果賦予的值超出了范圍就會報錯/ long long_c = 9300000000000000000L;/ 可以把一個int型值直接賦值給float型變量float float_a = 1;/ 可以把一個long型值直接賦值給float型變量fl
46、oat float_b = 1L;/ 沒有F(不區(qū)分大小寫)后綴標識的浮點數(shù)默認為double型的,不能將它直接賦值給float型變量/ float float_c = 1.0;/ float型數(shù)值需要有一個F(不區(qū)分大小寫)后綴標識float float_d = 1.0F;/ 把一個double型值賦值給float型變量,編譯時會報錯,即使這個值沒有超出float類型的取值范圍/ float float_e = 1.0D;/ 編譯器會做范圍檢查,如果賦予的值超出了范圍就會報錯/ float float_f = 3.5000000E38F;/ 可以把一個int型值直接賦值給double型變量d
47、ouble double_a = 1;/ 可以把一個long型值直接賦值給double型變量double double_b = 1L;/ 可以把一個float型值直接賦值給double型變量double double_c = 1F;/ 不帶后綴標識的浮點數(shù)默認為double類型的,可以直接賦值double double_d = 1.0;/ 也可以給數(shù)字增加一個D(不區(qū)分大小寫)后綴標識,明確標出它是double類型的double double_e = 1.0D;/ 編譯器會做范圍檢查,如果賦予的值超出了范圍就會報錯/ double double_f = 1.8000000000000000E3
48、08D;/ 把一個double型值賦值給一個byte類型變量,編譯時會報錯,即使這個值沒有超出byte類型的取值范圍/ byte byte_d = 1.0D;/ 把一個double型值賦值給一個short類型變量,編譯時會報錯,即使這個值沒有超出short類型的取值范圍/ short short_d = 1.0D;/ 把一個double型值賦值給一個int類型變量,編譯時會報錯,即使這個值沒有超出int類型的取值范圍/ int int_d = 1.0D;/ 把一個double型值賦值給一個long類型變量,編譯時會報錯,即使這個值沒有超出long類型的取值范圍/ long long_d = 1
49、.0D;/ 可以用字符初始化一個char型變量char char_a = a;/ 也可以用一個int型數(shù)值初始化char型變量char char_b = 1;/ 把一個long型值賦值給一個char類型變量,編譯時會報錯,即使這個值沒有超出char類型的取值范圍/ char char_c = 1L;/ 把一個float型值賦值給一個char類型變量,編譯時會報錯,即使這個值沒有超出char類型的取值范圍/ char char_d = 1.0F;/ 把一個double型值賦值給一個char類型變量,編譯時會報錯,即使這個值沒有超出char類型的取值范圍/ char char_e = 1.0D;/
50、 編譯器會做范圍檢查,如果賦予的值超出了范圍就會報錯/ char char_f = 70000;從上面的例子中我們可以得出如下幾條結(jié)論:1. 未帶有字符后綴標識的整數(shù)默認為int類型;未帶有字符后綴標識的浮點數(shù)默認為double類型。 2. 如果一個整數(shù)的值超出了int類型能夠表示的范圍,則必須增加后綴“L”(不區(qū)分大小寫,建議用大寫,因為小寫的L與阿拉伯?dāng)?shù)字1很容易混淆),表示為long型。 3. 帶有“F”(不區(qū)分大小寫)后綴的整數(shù)和浮點數(shù)都是float類型的;帶有“D”(不區(qū)分大小寫)后綴的整數(shù)和浮點數(shù)都是double類型的。 4. 編譯器會在編譯期對byte、short、int、lon
51、g、float、double、char型變量的值進行檢查,如果超出了它們的取值范圍就會報錯。 5. int型值可以賦給所有數(shù)值類型的變量;long型值可以賦給long、float、double類型的變量;float型值可以賦給float、double類型的變量;double型值只能賦給double類型變量。 下圖顯示了幾種基本類型之間的默認邏輯轉(zhuǎn)換關(guān)系: 圖中的實線表示無精度損失的轉(zhuǎn)換,而虛線則表示這樣的轉(zhuǎn)換可能會損失一定的精度。如果我們想把一個能表示更大范圍或者更高精度的類型,轉(zhuǎn)換為一個范圍更小或者精度更低的類型時,就需要使用強制類型轉(zhuǎn)換(Cast)了。不過我們要盡量避免這種用法,因為它常常
52、引發(fā)錯誤。請看下面的例子,如果不運行代碼,你能預(yù)測它的結(jié)果嗎?Java代碼 1. public class PrimitiveTypeTest 2. public static void main(String args) 3. int a = 123456; 4. short b = (short) a; 5. / b的值會是什么呢? 6. System.out.println(b); 7. 8. Java代碼 1. public class PrimitiveTypeTest 2. public static void main(String args) 3. int a = 123456
53、; 4. short b = (short) a; 5. / b的值會是什么呢? 6. System.out.println(b); 7. 8. public class PrimitiveTypeTest public static void main(String args) int a = 123456;short b = (short) a;/ b的值會是什么呢?System.out.println(b);運行結(jié)果:1. -7616 運算符對基本類型的影響 當(dāng)使用+、-、*、/、%運算符對基本類型進行運算時,遵循如下規(guī)則:1. 只要兩個操作數(shù)中有一個是double類型的,另一個將會被轉(zhuǎn)
54、換成double類型,并且結(jié)果也是double類型; 2. 否則,只要兩個操作數(shù)中有一個是float類型的,另一個將會被轉(zhuǎn)換成float類型,并且結(jié)果也是float類型; 3. 否則,只要兩個操作數(shù)中有一個是long類型的,另一個將會被轉(zhuǎn)換成long類型,并且結(jié)果也是long類型; 4. 否則,兩個操作數(shù)(包括byte、short、int、char)都將會被轉(zhuǎn)換成int類型,并且結(jié)果也是int類型。 當(dāng)使用+=、-=、*=、/=、%=、運算符對基本類型進行運算時,遵循如下規(guī)則: 運算符右邊的數(shù)值將首先被強制轉(zhuǎn)換成與運算符左邊數(shù)值相同的類型,然后再執(zhí)行運算,且運算結(jié)果與運算符左邊數(shù)值類型相同。 了解了這些,我們就能解答下面這個常考的面試題了。請看:引用short s1=1;s1=s1+1;有什么錯?short s1=1;s1+=1;有
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 養(yǎng)老院老人入住接待制度
- 養(yǎng)老院環(huán)境衛(wèi)生與綠化制度
- 《個性設(shè)計模板》課件
- 《目標市場定位分析》課件
- 2024年度外聘講師知識產(chǎn)權(quán)保護與收益分配合同3篇
- 2024年生態(tài)修復(fù)項目育林施工協(xié)議模板版B版
- 腦卒中康復(fù)治療方案
- 2024年版:戴悅與周日的特許經(jīng)營合同
- 2025年莆田貨運考試
- 2025年焦作貨運資格證模擬考試題
- GB/T 18367-2001公路收費方式
- 新疆生產(chǎn)建設(shè)兵團2022-2023學(xué)年數(shù)學(xué)七上期末質(zhì)量檢測試題含解析
- 2022年中山市房地產(chǎn)市場年度報告-世聯(lián)研究
- FZ/T 62039-2019機織嬰幼兒睡袋
- 【人類命運共同體論文】淺談“人類命運共同體”
- ARCGIS10基礎(chǔ)培訓(xùn)課件
- 課件:第一章 導(dǎo)論(《現(xiàn)代社會福利思想》課程)
- 第七章-期權(quán)的組合策略-《金融工程》課件
- 見證取樣和送檢見證人員備案表
- 明星志愿3及資料設(shè)定集總攻略打印版
- 鐵路專用線管理模式比較
評論
0/150
提交評論