- 好好學Java:從零基礎到項目實戰(zhàn)
- 歐陽燊
- 915字
- 2022-07-27 19:15:01
4.2.2 包裝變量的運算
對于數(shù)值包裝變量來說,它們仍舊允許使用四則運算符執(zhí)行計算操作,包括運算符“+”“-”“*”“/”“%”等。然而若要判斷兩個包裝變量的數(shù)值是否相等,便不可通過雙等號“==”來判斷,而要調用包裝變量的equals方法來校驗。equals方法返回true表示待比較的兩個包裝變量值相等,返回false表示兩個數(shù)值不等。調用equals方法的代碼示例如下:
Integer oneInteger=1; boolean equalResult=oneInteger.equals(2); // 包裝變量的equals方法相當于關系運算符“==” System.out.println("equalResult="+equalResult);
為什么包裝變量之間不能通過“==”比較是否相等呢?這是因為數(shù)值包裝類型不單單保存數(shù)值,還保存了各種方法信息。如果對兩個包裝變量使用運算符“==”,程序只會比較兩個變量是否為同一個東西,不會比較它們的數(shù)值是否相等。欲知究竟為何,且看下面的代碼(完整代碼見本章源碼的src\com\method\pack\PackOperation.java):
Integer ten1=10, ten2=10; //準備演示兩個包裝變量之間的==運算 boolean equalTen=(ten1==ten2); //當變量值小于128時,==運算僥幸得手 System.out.println("equalTen="+equalTen); Integer thousand1=1000, thousand2=1000; //準備演示兩個包裝變量之間的==運算 boolean equalThousand=(thousand1==thousand2); //當變量值大于128時,==運算不幸失手 System.out.println("equalThousand="+equalThousand);
上面的代碼準備比較兩個值為10的包裝變量是否相等,以及兩個值為1000的包裝變量是否相等。運行這段測試代碼,輸出以下的日志信息:
equalTen=true
equalThousand=false
由日志可見,采用運算符“==”比較的話,兩個值為10的包裝變量判作相等,而兩個值為1000的包裝變量卻判作不等。其實不等的判斷結果才是正常的,因為相等的判斷結果只在數(shù)值小于128時出現(xiàn)。當包裝變量的數(shù)值小于128時,程序會復用內存中已有的包裝變量,否則將另外創(chuàng)建新的包裝變量。所以切不可把特例當作慣例,若要比較兩個包裝變量的數(shù)值是否相等,務必通過equals方法比較才行。
除了基本的類型轉換與數(shù)值運算之外,包裝類型還提供了其他幾種常見的邏輯方法,比如sum方法用來求兩個數(shù)字之和,max方法用來求兩個數(shù)字的較大值,min方法用來求兩個數(shù)字的較小值。另有compare方法用來比較兩個數(shù)字的大?。喝舳呦嗟龋瑒t返回0;前者較小,則返回-1;若后者較小,則返回1。這幾個方法的調用代碼例子如下:
int a=7, b=8; int sum=Integer.sum(a, b); // 數(shù)值包裝類型的sum方法相當于算術運算符“+” System.out.println("sum="+sum); int max=Integer.max(a, b); // 數(shù)值包裝類型的max方法用來求兩個數(shù)字的較大值 System.out.println("max="+max); int min=Integer.min(a, b); // 數(shù)值包裝類型的min方法用來求兩個數(shù)字的較小值 System.out.println("min="+min); // 數(shù)值包裝類型的compare方法用來比較兩個數(shù)字的大小, // 若二者相等,則返回0;前者較小,則返回-1;若后者較小,則返回1 int compareResult=Integer.compare(a, b); System.out.println("compareResult="+compareResult);
- JavaScript從入門到精通(微視頻精編版)
- Mastering Visual Studio 2017
- C# 7 and .NET Core Cookbook
- Boost程序庫完全開發(fā)指南:深入C++”準”標準庫(第5版)
- Java EE框架整合開發(fā)入門到實戰(zhàn):Spring+Spring MVC+MyBatis(微課版)
- ASP.NET Core 2 and Vue.js
- Python應用輕松入門
- Hands-On Enterprise Automation with Python.
- Building RESTful Python Web Services
- Mastering Android Game Development
- 零基礎入門學習Python(第2版)
- 軟件品質之完美管理:實戰(zhàn)經典
- Creating Data Stories with Tableau Public
- Flowable流程引擎實戰(zhàn)
- Java EE項目應用開發(fā)