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

3.2 Java的運算符

程序中通常需要對常量和變量執行一些運算和操作,以實現數據處理的目的。運算符也稱為操作符,是Java語言中的一類特殊符號,用以指定對運算量(一般由常量和變量組成)所進行的特定運算和操作。

3.2.1 變量賦值與賦值運算符

如果要建立一個變量與其他常量或(和)變量的基本聯系,最常用的就是賦值操作。Java語言中的賦值運算符是“=”,最簡單的使用格式是:

     變量名1 = 常量;
     變量名2 = 變量名1;

例如,以下語句演示了變量的賦值操作。

     int age, yourAge;  // 聲明了整型變量age和yourAge
     age=35;              // 使用整型常量35為變量age賦初值
     yourAge=age+5;       // 將變量yourAge初始化為比age大5(歲)的值
     age=age+1;           // 變量age的值增加1(比原年齡大了1歲)

3.2.2 算術運算符

Java語言定義了十幾個算術運算符用以執行算術運算。算術運算符的操作對象都是數值類型數據。Java語言的算術運算符如表3.3所示。

表3.3 Java語言的算術運算符

例如,圖2.12簡單的加法計算器程序第122行的語句:

     double result = num1+num2;

首先執行變量num1與num2的加法運算,并將結果賦值給變量result。

變量的自加和自減運算改變變量本身的值,后自加和后自減首先取出變量原值,然后對變量執行加或減運算。例如:

     int age=35;
     System.out.println(age++);

首先在輸出窗口打印age的初值35,然后使age變量的值改變為原值35加1,即輸出語句執行之后age變量的值為36。前自加和前自減運算符首先對變量執行加或減運算而改變變量的值,然后取出改變后的變量值。例如,如果程序段修改為:

     int age=35;
     System.out.println(++age);

首先使age變量的值改變為原值35加1,即age變量的值為36,在輸出窗口打印age自加后的新值36。

算術復合賦值運算符+=、?=、*=、\=和%=的操作是先執行算術運算,再執行賦值操作。此類運算符左邊的變量是第一個操作數,右邊是第二個操作數,且左邊必須是變量名,右邊可以是運算式,運算結果賦值給左邊的變量。例如:

     int age=35, var1=2;
     var1 *= age+5 ;

后面這條語句相當于“var1=var1*(age+5) ;”,最終變量var1存放的是整數80。

注意,兩個整數除運算的結果只取商的整數部分。例如,23/5的結果是4,而不是4.6,也不是5(不能四舍五入)。

3.2.3 關系運算符

關系運算符執行兩個量(變量或常量)的比較操作,返回比較的結果。比較結果是布爾邏輯值true或false。Java語言的關系運算符如表3.4所示。

表3.4 Java語言的關系運算符

關系運算符一般用于數值類型數據的比較操作。對于float和double類型的量(稱為浮點數),由于在計算機內存儲時存在誤差,因此不應直接應用==比較,而是比較它們的差值大小,只要差值在足夠小的范圍內(可以接受的誤差范圍),就可以認為它們是相等的。例如,以下代碼比較double類型變量x1和x2是否相等。

最后一條語句首先使用Math類(java.lang包中的類,不用導入即可直接使用)的abs方法計算x1?x2的絕對值,然后比較該值是否小于1×10?5,如果是返回布爾值true則認為變量x1與x2相等,否則返回布爾值false并認為變量x1與x2不相等,最后將返回的布爾值賦值給布爾型變量x1Bigx2。

3.2.4 邏輯運算符

Java語言提供了幾個專門的邏輯運算符對boolean類型的量進行邏輯運算。Java語言的邏輯運算符如表3.5所示。

表3.5 Java語言的邏輯運算符

邏輯非運算符“!”對一個操作數進行運算,且運算符“!”前置,其余邏輯運算符都對兩個操作數進行運算。很多情況下,關系運算和邏輯運算會同時出現在同一個運算式中。例如,對于如下Java語句:

     int x=3, y=17;
     boolean yn=true, ans;
     ans = x<y && yn;

ans的值為true。因為,先計算“x<y”得到結果true,然后計算“true && true”得到結果true。如果第三條語句改為:

     ans = x==y &&yn;

則ans的值為false。因為,先計算“x==y”得到結果false,然后計算“false && true”得到結果false。如果第三條語句改為:

     ans = x<y && !yn;

ans的值為false。因為,先計算“!yn”得到結果false,然后計算“x<y”得到結果true,最后計算“true &&false”得到結果false。

簡潔邏輯與運算符&&和簡潔邏輯或運算符||具有“短路”特性,就是只要左邊的運算結果可以確定整個運算式的結果,就不會計算右邊的運算式。例如,對于如下Java語句:

     int x=3, y=17;
     boolean yn=true, ans;
     ans = yn&&y++%x==0;

ans的結果計算:因為yn為true,還必須計算右邊運算式的值。首先獲取y的值為17,再除以3(x的值)取余數為2,然后計算“2==0”的結果為false,所以ans的值為“true &&false”得到false,x值為3,y值為18(最后執行自加運算)。如果第三條語句改為:

     ans = yn&&++y%x==0;

ans的結果計算:因為yn為true,還必須計算右邊運算式的值。首先計算“++y”——y先自加1其值變為18,再除以3(x的值)取余數為0,最后計算“0==0”的結果為true,所以ans的值為“true && true”得到true,x值為3,y值為18。如果第三條語句改為:

     ans = !yn&&++y%x==0;

因為邏輯運算符&&左邊的“!yn”結果為false,所以ans可以立即得到結果為false,不會再執行右邊的計算,y變量的自加運算也不會執行,因此y保持初始值17。在JShell中的執行結果如下(刪除空行)。

     jshell> int x=3, y=17;
     x ==> 3
     y ==> 17
     jshell> boolean yn=true, ans;
     yn ==> true
     ans ==> false
     jshell> ans = !yn&&++y%x==0;
     ans ==> false
     jshell> x
     x ==> 3
     jshell> y
     y ==> 17
     jshell>

3.2.5 位運算符

Java語言提供了幾個對操作數的二進制位進行操作的運算符,稱為位運算符。表3.6列出了Java語言的位運算符。

表3.6 Java語言的位運算符

定點數包括Java基本數據類型中的char、byte、short、int和long,它們在計算機內部是以二進制補碼的形式表示和存儲的。正數的二進制補碼就是其他各進制數直接轉換為二進制數得到的數。負數的補碼計算方法是:首先計算出該數相反數的二進制補碼且空出的高位(左邊位)用0填滿,然后各位按位取反,最后加1。例如,整數類型的常量?12的補碼計算如下。

例如,9&5算式如下:

9|5算式如下:

9^5算式如下:

~9的運算為:

與算術運算符一樣,位運算符也可以與賦值運算符組合成復合賦值運算符。例如:

     int a=15,b; a >>= 2;

則等價于“a = a>>2;”。因此賦值結果是,變量a的值變為3。

以上例子只是說明Java語言位運算符的具體計算方法。如果程序中需要使用二進制數,或者需要進行數制轉換,定點數包裝類都有現成的方法可以使用。例如:

     Integer.parseInt("1111111111110110",2)

將返回二進制數1111111111110110的十進制值。又如:

     Integer.toBinaryString(249)

將返回十進制數249的二進制值字符串。同樣:

     Integer.toHexString(249)

將返回十進制數249的十六進制值字符串,結果為

3.2.6 其他運算符

1. ( )運算符

括號運算符( )將操作數放在括號內部。它的具體操作有多種:首先可以用于改變運算次序,與數學常識一致,優先進行括號內的運算;其次可以強制轉換它后面操作數的類型,例如,“(int)1.2L”的結果是將長整型常量1.2L轉換為整型常量1.2;第三種操作是為方法提供參數,例如“Integer.toBinaryString(249)”中的括號運算符就是將整型常量249傳遞給Integer類的方法toBinaryString。后面兩種用法以后會進行詳細介紹。

2. 字符串鏈接運算符+

當運算符“+”用在字符串與字符串之間,或字符串與其他類型數據之間時,會將兩個字符串鏈接起來,或者將其他類型轉換為字符串,再與運算符+的另一側的字符串鏈接起來。在Java程序設計中,這種用法十分普遍。例如:

     String str = "你好!"+" Welcome to use! ";

str變量值是。再如:

     int year=20;
     System.out.println("你的年齡是:"  + year);

輸出結果是“你的年齡是:20”。

在Java GUI程序設計中,經常會使用這個運算符將整數等其他類型的數據轉換為字符串,然后傳遞給需要字符串的方法中。例如,對于文本字段組件jTextField1,不允許直接將數值類型數據設置為它的text屬性,即“jTextField1.setText(234.12f);”是錯誤的,但可以采用以下方法設置:

     jTextField1.setText(""+234.12f);
3. 條件運算符? :

條件運算符的一般格式是:

     操作數1 ? 操作數2 : 操作數3

其中,操作數1是可以返回邏輯值的運算式,如果其值是true,則條件運算符的運算結果是操作數2的值,否則是操作數3的值。例如:

     31%2==1 ? "31是奇數" : "31是偶數"

該運算式的結果是:31是奇數。而運算式:

     36%2==1? "36是奇數":"36是偶數"

結果是:

前面在類的初步知識介紹中涉及的“.”稱為分量運算符,new操作符也屬于運算符。此外還有幾個運算符,遇到的時候再介紹。

主站蜘蛛池模板: 密云县| 清镇市| 天峻县| 中超| 宣武区| 江孜县| 八宿县| 横峰县| 新绛县| 库车县| 抚州市| 莎车县| 佛山市| 兴文县| 黄浦区| 阿合奇县| 丹巴县| 西贡区| 白城市| 六枝特区| 左权县| 山东省| 合阳县| 前郭尔| 万荣县| 芜湖县| 老河口市| 神木县| 霍邱县| 泸溪县| 红河县| 普兰县| 罗平县| 安岳县| 方城县| 洪江市| 柞水县| 广水市| 洪湖市| 崇左市| 龙州县|