1. 程式人生 > >Java基礎知識回顧之一 ----- 基本資料型別

Java基礎知識回顧之一 ----- 基本資料型別

前言

在開始工作至今,學習各種各樣的技術之中發現自己的很多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,最終資料結果會取其中最高的一個!

http://www.kfq4961.cn/news/
http://www.fsi2703.cn/news/
http://www.ybc8953.cn/news/
http://www.myy9223.cn/news/
http://www.paf5803.cn/news/
http://www.njb8631.cn/news/
http://www.kzo4326.cn/news/
http://www.tso8557.cn/news/
http://www.nwm1536.cn/news/
http://www.tae4138.cn/news/
http://www.dxc3579.cn/news/
http://www.ffp5727.cn/news/
http://www.lhb4836.cn/news/
http://www.xdi0113.cn/news/
http://www.bpa2365.cn/news/
http://www.fks8445.cn/news/
http://www.aht8537.cn/news/
http://www.cun5054.cn/news/
http://www.gdk7028.cn/news/
http://www.ypk8666.cn/news/
http://www.wan2959.cn/news/
http://www.sit9945.cn/news/
http://www.zmj4226.cn/news/
http://www.ccn6233.cn/news/
http://www.jck8045.cn/news/
http://www.ckk6213.cn/news/
http://www.mak1390.cn/news/
http://www.vii0197.cn/news/
http://www.pwj5001.cn/news/
http://www.wvh4263.cn/news/
http://www.mvg0339.cn/news/
http://www.yif9712.cn/news/
http://www.jta0960.cn/news/
http://www.omx8816.cn/news/
http://www.nlc4773.cn/news/
http://www.dep9137.cn/news/
http://www.vlq7732.cn/news/
http://www.umg2515.cn/news/
http://www.kog1435.cn/news/
http://www.nxf9936.cn/news/
http://www.hqh7518.cn/news/
http://www.hij5984.cn/news/
http://www.vui9639.cn/news/
http://www.fzl7156.cn/news/
http://www.wue0833.cn/news/
http://www.dye6768.cn/news/
http://www.ryh7899.cn/news/
http://www.lij0467.cn/news/
http://www.epv8502.cn/news/
http://www.lru8400.cn/news/
http://www.mtr5072.cn/news/
http://www.kbs9896.cn/news/
http://www.qfk7654.cn/news/
http://www.myb6827.cn/news/