1. 程式人生 > >Java基礎知識回顧之一 ----- 基本數據類型

Java基礎知識回顧之一 ----- 基本數據類型

博客 string 它的 基本數據 int short 溢出 etc tostring

前言

在開始工作至今,學習各種各樣的技術之中發現自己的很多Java的基礎知識都忘了⊙﹏⊙b汗。。。 而且越是學習越是發現Java基礎的重要性,所以準備單獨抽一下時間進行Java基礎的重新學習。在重新學習的時候,對這些又有了不同的感悟,於是準備將這些都記載下來,並整理成博客,希望能夠幫助那些需要的人。

基本數據類型介紹

基本數據類型主要有這幾個:
byte、short、int、long、float、double、char、boolean
可以分為三類:

  1. 數值類型:byte、short、int、long、float、double
  2. 字符類型:char
  3. 布爾型:boolean

byte

  1. byte是8位的數據類型,占用1個字節(8bit),默認值是0,它的取值範圍是(-2^7) ~ (2^7-1)
    ,也就是 -128 ~ 127之間,所以最大存儲數據量是255;
  2. byte一般在大型數組中使用,來代替整數,因為byte變量占用的空間只有int的1/4。
  3. byte使用示例: byte a = 10,byte=-10。在使用byte數據類型的時候需要註意取值範圍!!!

short

  1. short是16位的數據類型,占用2個字節,默認值是0,它的取值範圍是(-2^15) ~(2^15-1),也就是 -32768 ~ 32767之間,所以最大數據存儲量是65536;
  2. short雖然是int型變量所占空間的1/2,但是在實際中卻很少用到。在大型數組中也可以節省空間。
  3. short使用示例:short a=100,short b=-200;

int

  1. int是32位的數據類型,占用4個字節,默認值是0,它的取值範圍是(-2^31) ~(2^31-1),也就是 -2147483648 ~ 2147483647之間,所以最大數據存儲量是2^32-1;
  2. int是數據類型是整型,是我們在項目中用到最多的數據類型之一;
  3. int 使用示例:int a=1000,int b=-2000;

long

  1. long是64位的數據類型,占用8個字節,默認值是0L,它的取值範圍是(-2^63) ~(2^63-1),也就是 -9223372036854775808 ~ 9223372036854775808之間,所以最大數據存儲量是2^64;
  2. long是數據類型是長整型,是我們在項目中用到最多的數據類型之一。在使用long類型的數據時最好在數值末尾帶上大寫的L!
  3. long 使用示例:long a=1000L,long b=-2000L;

float

  1. float是32位的數據類型,占用4個字節,默認值是0,它的取值範圍是3.4e-45 ~ 1.4e38 之間;
  2. float是數據類型是單精度,在直接賦值時必須在數字後加上f或F。
  3. float使用示例:float a=10.25f, float b=-20.35F;

double

  1. double是64位的數據類型,占用8個字節,默認值是0,它的取值範圍是4.9e-324 ~ 1.8e308 之間;
  2. double是數據類型是雙精度,在直接賦值的時候最好加上D或d。
  3. double使用示例:double a=10.123d, double b= -10.25644D;

boolean

  1. boolean是布爾類型,占用1個字節,只有兩個值,false和true,默認值是 false。
  2. boolean只能用一種標誌來記錄 true或false,一般和 if 結合使用。
  3. boolean使用示例: boolean a=true,boolean b=false;

char

  1. char是字符類型,占用2個字節,默認值為空,取值範圍 為 0~65535,也就是 \u0000 ~ \uffff
  2. char數據類型可以儲存任何字符。
  3. char 使用示例: char a=1,char b=‘A‘;

數值類型的級別從低到高分別為:
byte,char,short(這三個平級)——>int——>float——>long——>double
其中由低級別轉到高級別,是屬於自動類型轉換,這點是由系統自動轉換的。

例如將int類型的數據轉為float類型的數據。
示例:

int i=10;
float j=i;
System.out.println("i:"+i+",j:"+j);

結果:

i:10,j:10.0

如果由高級別轉為低級別,則需要強制轉換,也就是強制類型轉換。
例如將int類型的數據轉換為byte類型的數據。
示例:

int i=127;
int j=128;
byte bye=(byte)i;
byte bye2=(byte)j;
System.out.println("i:"+i+",bye:"+bye);
System.out.println("j:"+j+",bye2:"+bye2);

結果:

i:127,bye:127
j:128,bye2:-128

說明:因為 byte 類型是 8 位,最大值為127,所以當 int 強制轉換為 byte 類型時,值 128 時候就會導致溢出。所以在進行強制類型轉換的時候,要註意取值範圍!

強制轉換的時候需要註意數據的精確度,否則可能會出現數據精確丟失。
例如 double類型的數據轉換為float類型數據。
示例:

double d=10.1111115;
float f=(float) d;
System.out.println("f:"+f+",d:"+d);

結果:

f:10.111112,d:10.1111115

了解了數據類型的級別之後,如果用不同的數據類型進行計算,那麽最終的數據類型又是哪一種呢?
這裏我們用這幾種來測試:
1.byte 類型的數據 加 short 類型的數據;
2.short 類型的數據 加 int 類型的數據;
3.int 類型的數據 加 long 類型的數據;

這裏我們使用這個方法來獲取最終的數據類型

public static String getType(Object o){ 
        return o.getClass().toString(); 
    }

代碼:

short a=1;
byte b=2;
int c = 3;
long d = 4;
System.out.println(getType(a));
System.out.println(getType(b));
System.out.println(getType(c));
System.out.println(getType(d));
System.out.println(getType(a+b));
System.out.println(getType(a+c));
System.out.println(getType(c+d));

結果:

class java.lang.Short
class java.lang.Byte
class java.lang.Integer
class java.lang.Long
class java.lang.Integer
class java.lang.Integer
class java.lang.Long

看到結果是不是有點吃驚呢?那麽是為什麽呢?
這裏的不同的數值類型數據進行相加的時候,會自動轉換為級別最高的那一個。
那麽short 類型的數據加 byte 類型的數據為什麽是int類型呢?
因為在java的世界裏,如果比int類型小的類型做運算,java在編譯的時候就會將它們統一強轉成int類型。
如果上述不好理解的,那麽這裏我們來做個實驗測試下,通過結果來進行驗證。
示例:

short a=1,b=2;
byte c=3,d=4;
System.out.println(getType(a+b));
System.out.println(getType(c+d));

結果:

class java.lang.Integer
class java.lang.Integer

那麽這裏可以得出結論,在數值類型中,若級別小於int,進行計算的時候,最終的數據類型會自動轉換為int,如果高於int,最終數據結果會取其中最高的一個!

Java基礎知識回顧之一 ----- 基本數據類型