本文源碼:GitHub·點這裏 || GitEE·點這裏java
不使用New建立,聲明一個非引用傳遞的變量,且變量的值直接置於堆棧中,大小不隨運行環境變化,效率更高。使用new建立的引用對象存儲在堆中。git
基本類型包括以下幾種:byte、short、int、long、float、double、boolean、char,能夠經過相關方法查看範圍大小。github
public class IntType01 { public static void main(String[] args) { System.out.println("進制位數:"+Integer.SIZE); System.out.println("最小值:"+Integer.MIN_VALUE); System.out.println("最大值:"+Integer.MAX_VALUE); System.out.println("進制位數:"+Double.SIZE); System.out.println("最小值:"+Double.MIN_VALUE); System.out.println("最大值:"+Double.MAX_VALUE); } }
自動轉換
:範圍小的數據類型能夠自動轉換成範圍大的數據類型。ide
強制轉換
:把一種數據類型轉換爲另一種數據類型。編碼
類型提高
:表達式運算中有不一樣的數據類型,類型會自動向範圍大的提高。code
public class IntType02 { public static void main(String[] args) { // 自動轉換 int i = 112 ; long j = i ; System.out.println(j); // 強制轉換 double d = 13.14 ; int f = (int)d; System.out.println(f); // 類型提高 long r = i * j ; System.out.println(r); } }
注意:類型轉換中最須要關注的問題就是範圍大小問題。對象
基本數據類型不符合面向對象思想,從而出現了包裝器類型, 而且包裝器添加了更多的屬性和方法,自動包裝功能能夠將基本類型轉換爲包裝器類型。Java爲每一個原始類型都提供了一個封裝類,Integer、Double、Long、Boolean、Byte等等。ip
public class IntType03 { public static void main(String[] args) { Integer int1 = null ; Double dou1 = 13.14 ; Long lon1 = 123L ; } }
Integer變量的默認值爲null,說明Integer能夠區分出未賦值和值爲0的區別,比如考試得0分和沒參加考試的區別。ci
char類型變量是用來儲存Unicode編碼的字符的,unicode字符集包含漢字。unicode
public class IntType04 { public static void main(String[] args) { char cha1 = '知'; System.out.println(cha1); } }
注意
:可能存在特殊生僻字沒有包含在unicode編碼字符集中。
+= 和 =
的區分:short s1=1;s1=s1+1與short s1=1;s1+=1;
問題。
public class IntType05 { public static void main(String[] args) { short s1 = 1 ; // s1 = s1 + 1 ; // 變異錯誤:s1自動向int類型轉換 s1 += 1 ; System.out.println(s1); } }
+=
運算符是java語言規定的,編譯器會對它進行識別處理,所以能夠正確編譯。
兩個邏輯值: true
和false
,一般用來表示關係運算的結果。
public class IntType06 { public static void main(String[] args) { // 存在精度損失問題:0.30000000000000004 System.out.println(3*0.1); // true System.out.println(0.3 == 0.3); // false System.out.println(3*0.1 == 0.3); } }
這兩個類型可能大部分狀況下都說不明白關係和區分,首先要理解幾個基礎概念。
浮點數
:在計算機中用以近似表示任意某個實數。具體的說,這個實數由一個整數或定點數乘以某個基數(計算機中一般是2)的整數次冪獲得
單精度浮點數
:單精度浮點數是用來表示帶有小數部分的實數,通常用於科學計算。佔用4個字節(32位)存儲空間
雙精度浮點數
:雙精度浮點數(double)是計算機使用的一種數據類型,使用64位(8字節)來存儲一個浮點數。
位數:32 最小值:1.4E-45 最大值:3.4028235E38
位數:64 最小值:4.9E-324 最大值:1.7976931348623157E308
float和double聲明和轉換相關演示案例。
public class IntType07 { public static void main(String[] args) { // float 聲明 float f1 = 12.3f ; // double 聲明 double d1 = 13.4 ; // 向下轉型,須要強制轉換 float f2 = (float) d1 ; System.out.println("f1="+f1+";d1="+d1+";f2="+f2); } }
支持任意大小的整數運算,且不會再運算過程有任何丟失狀況,沒有對應的基本類型,運算也會變得相對複雜,運算速度天然也就會降低。
支持任意精度的定點數,一般用來進行精確的貨幣計算,在公司的平常開發中,這裏一般是硬性要求。
public class IntType08 { public static void main(String[] args) { BigDecimal dec1 = new BigDecimal(3.0) ; BigDecimal dec2 = new BigDecimal(2.11) ; // 精確加法運算 BigDecimal res1 = dec1.add(dec2) ; System.out.println(res1); // 精確減法運算,並截取結果 // HALF_UP:四捨五入 BigDecimal res2 = dec1.subtract(dec2); System.out.println(res2.setScale(1, RoundingMode.HALF_UP)); // 精確乘法運算 BigDecimal res3 = dec1.multiply(dec2) ; System.out.println(res3.doubleValue()); // 精確除法運算,並截取結果 // ROUND_DOWN:直接按保留位數截取 BigDecimal res4 = dec1.divide(dec2,2,BigDecimal.ROUND_DOWN); System.out.println(res4); } }
GitHub·地址 https://github.com/cicadasmile/java-base-parent GitEE·地址 https://gitee.com/cicadasmile/java-base-parent