數據類型分爲兩大類
變量類似於內存中的一個個盒子,盒子有形狀和大小,不同的數據類型代表不同的形狀只有形狀一致的東西才能放到對應的盒子中,對於同形狀的盒子(同類型),也有大小之分(取值範圍的不同)。
一、基本數據類型
數字型
整數類型
byte
- 字節,長度爲1個字節,8位。
- 字節類型的應用常見於I/O操作中,對於文件的處理上。
- 字節好比人民幣裏的“分”單位,日常比較少用,關鍵時候還是離不開的。
short
- 短整型,長度爲2個字節,16位。
- 短整型使用得比較少;在32位CPU中,JVM會自動把short轉換爲int;在程序運行中,short不會比int更節省內存。
- 在存儲和傳輸上,確定值short能裝下時,使用short比使用int更節省空間。
int
- 整型 長度爲4個字節,32位。
- 整型比較常用,在64位CPU中又會轉爲long。
long
- 長整型 長度爲8個字節,64位。
- 同short和int,在64位CPU上運行效率高,根據實際情況使用。
浮動類型
- 浮點數是不精確的,一定不能用於比較。浮點類型float,double的數據不適合在不容許舍入誤差的金融計算領域。如果需要進行不產生舍入誤差的精確數字計算,需要使用BigDecimal類。
- 特別需要注意的是兩個浮點數的算術運算。
java.math.BigDecimal;
public class Test{
public static void main(String args[]){
System.out.println(0.05+0.01); //0.060000000000000005
System.out.println(1.0-0.42); //0.5800000000000001
System.out.println(4.015*100); //401.49999999999994
System.out.println(123.3/100); //1.2329999999999999
float f = 0.1f;
double d = 1.0/10;
System.out.println(f==d);//結果爲false
BigDecimal bd = BigDecimal.valueOf(1.0);
bd = bd.subtract(BigDecimal.valueOf(0.1));
bd = bd.subtract(BigDecimal.valueOf(0.1));
bd = bd.subtract(BigDecimal.valueOf(0.1));
bd = bd.subtract(BigDecimal.valueOf(0.1));
bd = bd.subtract(BigDecimal.valueOf(0.1));
System.out.println(bd); //0.5 正確值
System.out.println(1.0 - 0.1 - 0.1 - 0.1 - 0.1 - 0.1); //0.5000000000000001 錯誤值
//判斷兩個值是否相等
BigDecimal bd1=BigDecimal.valueOf(0.1);
BigDecimal bd2=BigDecimal.valueOf(1.0/10);
System.out.println(bd1);
System.out.println(bd2);
System.out.println(bd1.equals(bd2));
}
}
float
- 單精度浮點型,長度爲4個字節,32位。
- 單精度浮點型使用較少,JVM會自動把float轉換爲double後再運算,能節省存儲和傳輸空間但不節省內存空間。
double
- 雙精度浮點型,長度爲8個字節,64位。
- 雙精度浮點型在開發中比較常用。
字符型
char
- 字符型,長度爲2個字節,16位。
- 字符型比較少用,對應的字符數組及String比較常用。
布爾型
boolean
- 布爾型,1位。
- 值只能爲true或flase,常用來做判斷。
二、引用數據類型
類、接口、數組。Integer,Byte,Float,Double,Char,String,其它一切java提供的,或者你自己創建的類。
其中Integer又叫 int的包裝類。而Byte和Float也類似,一般包裝類的名字首寫是數值名的大寫開頭。
String類你可以理解成 char[]數組去想就明白了。因爲數組是一個類,所以String也就是一個類了。它不是基本數據類型。
變量的轉換
自動轉換原則:由表述範圍小的轉向表述範圍大的。
由大的轉向小的,使用強制轉換,有可能會丟失信息。
要特別注意是否值是否溢出了。
public class HelloWorld {
public static void main(String []args) {
System.out.println(1000000000*200); //-1863462912 溢出了
System.out.println(1000000000*(long)200); //200000000000
System.out.println(1000000000*200L); //200000000000
}
}
變量的存放
所以在對String值進行比對時,不能直接使用==符合;得使用equals()方法;這是個常見的錯誤。
public class HelloWorld {
public static void main(String []args) {
char k = 'K';
char h='K';
System.out.println(k==h); //true
String y ="Y";
String w = "Y";
String u=new String("Y");
System.out.println(y==u); //false
System.out.println(y==w); //true
System.out.println(y.equals(u)); //true
}
}
使用關鍵字new,一定會開闢一個新的堆內存空間。想要進行字符串內容的比較,可以使用equals()。