1. 程式人生 > >Java開發筆記(二十七)數值包裝型別

Java開發筆記(二十七)數值包裝型別

方法的出現緣起優化程式碼結構,但它的意義並不侷限於此,正因為有了方法定義,程式語言才更像一門能解決實際問題的工具,而不僅僅是隻能用於加減乘除的計算器。在數學的發展過程中,為了表示四則運算,人們創造了加減乘除符號,對應Java程式設計的“+”、“-”、“*”、“/”。但是隨著運算型別的增多,新的運算子號來不及創造了,於是出現了函式形式的運算操作,譬如三角函式sin、cos等等。這種數學函式就是方法的雛形,對於三角函式來說,角度類似方法的輸入引數,而函式值類似方法的輸出引數。
自從有了方法,大部分的算術計算都可以使用方法來表達,不過基本數值型別如int、long等由於設計上的緣故,它們的變數並不能直接呼叫方法;因此Java另外為基本型別定義了對應的包裝型別,通過包裝變數才能呼叫相關的算術方法。下面是基本數值型別與包裝數值型別的關係說明:
位元組型byte,對應包裝位元組型別Byte
短整型short,對應包裝短整型別Short
整型int,對應包裝整型Integer
長整型long,對應包裝長整型別Long
浮點型flotat,對應包裝浮點型別Flota
雙精度型double,對應包裝雙精度型別Double
包裝型別與基本型別一樣,首先要宣告包裝變數,然乎對該變數進行賦值。給包裝變數賦值(或稱初始化)有三種方式,分別介紹如下:
1、直接通過等號把具體數字賦值給包裝變數,程式碼示例如下:

		// 初始化包裝變數的第一種方式:直接用等號賦值
		Integer oneInteger = 1;

 

2、呼叫Integer的valueOf方法完成指定數字的賦值,這裡可將Integer換成該數字想要表達的包裝型別,具體賦值程式碼見下:

		// 初始化包裝變數的第二種方式:呼叫包裝型別的valueOf方法
		Integer oneInteger = Integer.valueOf(1);

 

3、使用關鍵字new建立新的包裝變數,形如“new 包裝型別名稱(具體數字)”,下面是該方式的賦值程式碼例子:

		// 初始化包裝變數的第三種方式:使用關鍵字new建立新變數
		Integer oneInteger = new Integer(1);

 

話說包裝變數的初始化方式為啥這麼多呢?彷彿孔乙己號稱茴香豆的茴字有四種寫法。其實不管設計師還是程式設計師,大家都是人,有的喜歡簡單點,有的希望嚴謹點,有的邋里邋遢,有的循規蹈矩,所謂蘿蔔青菜各有所愛,眾口難調罷了。所以給包裝變數賦值的寫法,也只好一一照顧眾人的口味,既有簡單直白的寫法,也有意思明瞭的寫法,還有面向物件的寫法,總有一款適合你。
既然可以把基本型別的變數直接賦值給包裝變數,那麼反過來能否直接將包裝變數賦值給基本變數呢?很遺憾這個操作是不允許的,並且也不能使用基本型別之間的強制型別轉換,只能通過指定方法獲得對應的基本變數數值。例如,要想把包裝變數賦值給整型變數,則需呼叫該包裝變數的intValue方法。依此類推,從包裝變數獲取位元組數值、短整數值、長整數值、浮點數值、雙精度數值,就得分別呼叫包裝變數的byteValue方法、shortValue方法、longValue方法、floatValue方法、doubleValue方法。下面是將包裝變數賦值給各種基本型別變數的程式碼例子:

		// 初始化包裝變數的第一種方式:直接用等號賦值
		Integer oneInteger = 1;
		System.out.println("oneInteger="+oneInteger);
		// 把包裝變數轉換成位元組變數,需要呼叫包裝變數的byteValue方法
		byte oneByte = oneInteger.byteValue();
		System.out.println("oneByte="+oneByte);
		// 把包裝變數轉換成短整變數,需要呼叫包裝變數的shortValue方法
		short oneShort = oneInteger.shortValue();
		System.out.println("oneShort="+oneShort);
		// 把包裝變數轉換成整型變數,需要呼叫包裝變數的intValue方法
		int oneInt = oneInteger.intValue();
		System.out.println("oneInt="+oneInt);
		// 把包裝變數轉換成長整變數,需要呼叫包裝變數的longValue方法
		long oneLong = oneInteger.longValue();
		System.out.println("oneLong="+oneLong);
		// 把包裝變數轉換成浮點變數,需要呼叫包裝變數的floatValue方法
		float oneFloat = oneInteger.floatValue();
		System.out.println("oneFloat="+oneFloat);
		// 把包裝變數轉換成雙精度變數,需要呼叫包裝變數的doubleValue方法
		double oneDouble = oneInteger.doubleValue();
		System.out.println("oneDouble="+oneDouble);

 

對於數值包裝變數來說,它們仍舊允許使用四則運算子進行計算操作,包括運算子“+”“-”“*”“/”“%”等等。然而若要判斷兩個包裝變數是否相等,便不可通過雙等號“==”來判斷,而要呼叫包裝變數的equals方法來校驗。equals方法返回true表示待比較的兩個包裝變數值相等,返回false表示兩個數值不等,呼叫equals方法的程式碼示例如下:

		// 數值包裝變數的equals方法相當於關係運算符“==”
		boolean equalResult = oneInteger.equals(2);
		System.out.println("equalResult="+equalResult);

 

除了基本的型別轉換與數值運算之外,包裝型別還提供了其它幾種常見的邏輯方法。比如sum方法用來求兩個數字之和,max方法用來求兩個數字的較大值,min方法用來求兩個數字的較小值。另有compare方法用來比較兩個數字的大小,若二者相等則返回0,前者較小則返回-1,後者較小則返回1。這幾個方法的呼叫程式碼例子如下:

		int a = 7, b = 8;
		// 數值包裝型別的sum方法相當於算術運算子“+”
		int sum = Integer.sum(a, b);
		System.out.println("sum="+sum);
		// 數值包裝型別的max方法用來求兩個數字的較大值
		int max = Integer.max(a, b);
		System.out.println("max="+max);
		// 數值包裝型別的min方法用來求兩個數字的較小值
		int min = Integer.min(a, b);
		System.out.println("min="+min);
		// 數值包裝型別的compare方法用來比較兩個數字的大小,二者相等則返回0,前者較小則返回-1,後者較小則返回1
		int compareResult = Integer.compare(a, b);
		System.out.println("compareResult="+compareResult);

 

更多Java技術文章參見《Java開發筆記(序)章節目錄