java中8個基本數據類型


Java中的數據類型

java中的數據類型分為兩種:

  • 一種是基本數據類型,有八個,分別是byte、short、int、long、char、boolean、double、float
  • 一種是引用數據類型,也就是我們通常所說的對象。

8大基本數據類型

java中的基本數據類型,可以分成四大類:

- 整型:byte、short、int、long
- 浮點型:double、float
- 字符型:char
- 布爾型:boolean

bit位

  • bit就是位,也叫比特位,是計算機表示數據的最小存儲單位。
  • byte(B) 字節,1字節 = 8位,也就是 1byte = 8 bit = 1B;
  • B、KB、MB、GB、TB的換算單位是1024(2^10);
    • 1B = 8bit
    • 1KB = 1024B
    • 1MB = 1024KB
    • 1GB = 1024MB
    • 1TB = 1024GB

封裝類

我們用代碼來看下八種基本數據類型的二進制位數、最大范圍,最小范圍:

public static void main(String[] args) {
    // 二進制位數 SIZE  最大值 MAX_VALUE    最小值 MIN_VALUE

    System.out.println("byte 的二進制位數:  " + Byte.SIZE + ";      byte 的最小值:" + Byte.MIN_VALUE + ";       byte 的最大值:" + Byte.MAX_VALUE);
    System.out.println("short 的二進制位數: " + Short.SIZE + ";    short 的最小值:" + Short.MIN_VALUE + ";     short 的最大值:" + Short.MAX_VALUE);
    System.out.println("int 的二進制位數:   " + Integer.SIZE + ";    int 的最小值:" + Integer.MIN_VALUE + ";     int 的最大值:" + Integer.MAX_VALUE);
    System.out.println("long 的二進制位數:  " + Long.SIZE + ";      long 的最小值:" + Long.MIN_VALUE + ";       long 的最大值:" + Long.MAX_VALUE);
    System.out.println("float 的二進制位數: " + Float.SIZE + ";    float 的最小值:" + Float.MIN_VALUE + ";     float 的最大值:" + Float.MAX_VALUE);
    System.out.println("double 的二進制位數:" + Double.SIZE + ";  double 的最小值:" + Double.MIN_VALUE + ";   double 的最大值:" + Double.MAX_VALUE);
    System.out.println("char 的二進制位數:  " + Character.SIZE + "; char 的最小值:" + Character.MIN_VALUE + ";  char 的最大值:" + Character.MAX_VALUE);
}

============================================================================================================

byte 的二進制位數:   8;     byte 的最小值:-128;                  byte 的最大值:127
short 的二進制位數: 16;    short 的最小值:-32768;               short 的最大值:32767
int 的二進制位數:   32;      int 的最小值:-2147483648;            int 的最大值:2147483647
long 的二進制位數:  64;     long 的最小值:-9223372036854775808;  long 的最大值:9223372036854775807
float 的二進制位數: 32;    float 的最小值:1.4E-45;              float 的最大值:3.4028235E38
double 的二進制位數:64;   double 的最小值:4.9E-324;            double 的最大值:1.7976931348623157E308
char 的二進制位數:  16;     char 的最小值: ;                     char 的最大值:�

拓展:

float

最小值:1.4E-45,表示 1.4除以10的45次冪,
1.4E-45 = 1.4÷(10^45)=0.0000000000000000000000000000000000000000000014 。 

最大值:3.4028235E38,表示 3.4028235乘以10的38次冪
3.4028235E38=3.4028235×10^38=340282350000000000000000000000000000000 。

double也是這么看的,這樣就能更清晰的看出浮點類型的范圍有多大了!!!!

面試題:銀行關於錢的業務怎么表示?

​ 很多新手在學習了java的基本數據類型后,第一反應就是使用浮點數float或double,因為我們平時使用手機支付比較多,或者查詢銀行余額的時候都會發現,他們顯示的都是小數,取小數點后兩位,也就是到幾元幾角幾分,或者說是幾點幾幾元。這樣我們完全可以使用float或double來表示!!!

Everybody,No! No! No! 重要的事情說三遍!!! 千萬不要嘗試使用浮點數直接表示銀行業務,這樣你會被你的領導打屎的!這是為什么呢?下面我們來看一段代碼:

代碼1:
	float f1 = 1.1f;
	double d1 = 1.1;
	System.out.println(f1 == d1); // false

代碼2:
	    float f1 = 1232343423453f;
        float d1 = f1 + 1;
        System.out.println(f1 == d1); // true

​ 代碼1中,float類型的變量 f1的值是 1.1,double類型的變量d1的值也是1.1,按理說 1.1=1.1,那么 f1==d1應該是true才對,可恰恰相反,控制台輸出的結果是false,這是為什么呢?

​ 同樣的,代碼2中,d1=f1+1,那么f1和d1肯定是不會相等的,但是控制台輸出的確實true,這又是為什么呢?

​ 我們應該知道float是單精度,double是雙精度,那么什么是單精度什么是雙精度呢?

單精度和雙精度是什么意思?

​ 我們先來看下單精度和雙精度的格式:

  • 單精度浮點數:符號位占1bit,指數占8bit,小數部分占23bit。

  • 雙精度浮點數:符號位占1bit,指數占11bit,小數部分占52bit;

​ 不管是float還是double,在計算機上的存儲都遵循IEEE規范,使用的是二進制計數法,都包含三個部分:符號、指數、尾數(小數)部分。其中float單精度浮點數的符號、指數、尾數分別是1、8、23,double雙精度浮點數分別是1、11、52.

​ 當float或double進行計算或比較時,他們都是計算的符合自己范圍之內的二進制數,超出范圍的二進制數會被忽略掉,雖然這點誤差特別特別小,微乎其微,但卻是確實存在的,這就導致出現了誤差。所以請記住一句話:"千萬不要使用浮點數進行比較運算!!!"

單精度和雙精度的區別

  • 在內存中占有的字節數不同:單精度占4個字節32位,雙精度占8個字節64位。
  • 有效位數不同:單精度有效位數(十進制的有效表達)是7 ~ 8位,雙精度有效位數是 15 ~ 16位,這是由於編譯器的不同導致的。
  • 能夠表示的范圍不同
  • 在程序中的處理速度不同:一般CPU處理單精度比處理雙精度的浮點數要更快。

銀行關於錢的業務怎么表示?

​ 前邊說了這么多,現在我們應該知道,float和double是不能直接用於銀行業務的,那么該怎么辦呢?java為我們提供了 **BigDecimal ** 和 BigInteger 兩個大數字(有效數字超過16位)的操作類,其中 BigInteger是用於大整數的處理類,而BigDecimal則是針對大浮點數的處理類。

銀行關於錢的業務,我們使用 BigDecimal來表示!!!

關於 BigDecimal類,有時間再另起一篇去詳細介紹,有興趣的朋友可以自行去百度和API中現行了解下。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM