官术网_书友最值得收藏!

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);
主站蜘蛛池模板: 香河县| 滨海县| 岑溪市| 富裕县| 伊宁县| 永安市| 双辽市| 榆林市| 普格县| 汉寿县| 神木县| 舞阳县| 隆林| 江津市| 宽甸| 平乐县| 吐鲁番市| 彭山县| 浑源县| 普安县| 常州市| 湘潭市| 九江县| 龙川县| 莱芜市| 虹口区| 彭水| 宜城市| 嘉禾县| 义马市| 广西| 孝感市| 桐柏县| 颍上县| 兴宁市| 西昌市| 丰城市| 九龙坡区| 怀宁县| 镇平县| 黄冈市|