運(yùn)算符
同大多數(shù)的編程語(yǔ)言一樣,Java語(yǔ)言也包含了許多的運(yùn)算符。如果大家學(xué)習(xí)過(guò)C或者C++,會(huì)發(fā)現(xiàn)下面介紹的各種Java的運(yùn)算符都與之類(lèi)似。
3.1.1 賦值運(yùn)算符 =
這是任何編程語(yǔ)言的最基本的運(yùn)算符,它用來(lái)給變量指定一個(gè)值。對(duì)于基本類(lèi)型來(lái)說(shuō),賦值都便于理解,將新的值賦給變量并保存在變量中供使用。但對(duì)于對(duì)象類(lèi)型來(lái)說(shuō),這里就有一點(diǎn)區(qū)別,特別需要提醒大家注意。
對(duì)象類(lèi)型并不是把實(shí)際的值(這里是實(shí)例)賦給了對(duì)象類(lèi)型的變量,而是賦給的一個(gè)參考指針。這樣,源對(duì)象類(lèi)型的變量和新的這個(gè)變量實(shí)際上是指向的同一個(gè)實(shí)例,如果使用其中一個(gè)讓實(shí)例改變,那么相應(yīng)的另一個(gè)所指向的實(shí)例也會(huì)改變。這里我們可以借用C里面的指針的概念來(lái)方便理解,但實(shí)際上Java是不具有指針的概念和定義的。
我們通過(guò)下面的例子可以進(jìn)一步來(lái)理解這個(gè)概念。
import java.awt.Dimension;
class ReferenceTest {
Dimension a = new Dimension ( 5,10 );
System.out.println (“a.height = ” + a.height ) ;
Dimension b = a ;
b.height = 30 ;
System.out,println (“a.height = ” + a.height + “after change to b ”);
}
}
復(fù)制代碼
運(yùn)行結(jié)果:
c:\java Project\Reference>;java ReferenceTest
a.height = 10
a. height = 30 afer change to b
另外,賦值運(yùn)算符還可以和其他的運(yùn)算符,聯(lián)合組成新的賦值符。如*=、/=、+=、-=等等,這于C或者C++類(lèi)似。
3.1.2 比較運(yùn)算符
比較運(yùn)算符是用來(lái)對(duì)相同數(shù)據(jù)類(lèi)型的變量進(jìn)行大小或者是否相等、相同的比較,返回的是Boolean類(lèi)型的值。因此也就大概分為兩類(lèi)。
n >;、>;=、<、<=
這是比較變量的大小關(guān)系,與我們學(xué)過(guò)的任何編程語(yǔ)言相同,就不再介紹了。
n = = 、! =
這是比較變量是否相等或相同。這對(duì)于平常的比較基本類(lèi)型的變量容易理解,只是我們要強(qiáng)調(diào)一下對(duì)對(duì)象類(lèi)型的比較。與我們前面介紹的賦值運(yùn)算符類(lèi)似的是,它也是進(jìn)行的對(duì)其參考指針的比較,而并不是比較兩個(gè)內(nèi)容上的差別。我們可以借助下面的例子來(lái)理解。
import java.awt.Button
class CompareRefernce {
public static void main ( String [ ] args ) {
Button a = new Button ( “Exit”);
Button b = new Button ( “Exit”);
Button c = a;
System.out.println ( “Is refernce a = = b ? ” + ( a = = b) ) ;
System.out.println ( “Is refernce a = = c ? ” + ( a = = c) ) ;
}
}
復(fù)制代碼
運(yùn)行結(jié)果:
Is refernce a = = b ? false
Is refernce a = = c ? true
3.1.3 instanceof運(yùn)算符
這個(gè)是Java語(yǔ)言特殊的一個(gè)運(yùn)算符,它是用來(lái)測(cè)試其對(duì)象是否屬于某類(lèi)或其超類(lèi)。但是這里需要提醒大家的是,如果你使用instanceof來(lái)比較不是一個(gè)繼承關(guān)系樹(shù)上的類(lèi),Java能夠編譯通過(guò),但運(yùn)行的時(shí)候會(huì)報(bào)錯(cuò)。另外,你可以對(duì)null對(duì)象使用這個(gè)運(yùn)算符,只是無(wú)論對(duì)于什么類(lèi)測(cè)試的結(jié)果都是false。
3.1.4 算術(shù)運(yùn)算符
加+、減-、乘*、除/和取模%運(yùn)算,這與其他的編程語(yǔ)言類(lèi)似,不再詳述。
3.1.5 自增++、自減--運(yùn)算符
Java的自增和自減運(yùn)算符,與C語(yǔ)言類(lèi)似,同樣需要注意的是其放置的位置不同,可能的結(jié)果也不同。如果放置在變量的前面,表示先自增(減)再參與下步運(yùn)算,而如果放置在后面則表示先參與運(yùn)算再自增(減)。如下的例子說(shuō)明了自增運(yùn)算符的使用:
class IncDec{
public static void main ( String [ ] args ) {
int a = 1;
int b = 1;
int c;
int d;
c = ++b;
d = a++;
c++;
System.out.println ( “a = ” + a );
System.out.println ( “b = ” + b );
System.out.println ( “c = ” + c );
System.out.println ( “d = ” + d );
}
}
復(fù)制代碼
運(yùn)行結(jié)果:
a = 2
b = 2
c = 3
d = 1
3.1.6 字符串連接運(yùn)算符 +
Java語(yǔ)言與C語(yǔ)言類(lèi)似,也使用+作為連接字符串的運(yùn)算符,這實(shí)際是對(duì)String類(lèi)重載了+運(yùn)算符。
3.1.7 位運(yùn)算符
包括位移運(yùn)算和位邏輯運(yùn)算,這也與C語(yǔ)言相似。
->; 位移運(yùn)算
>;>;右移、<<左移、>;>;>;無(wú)符號(hào)右移。
->; 位邏輯運(yùn)算
&與、|或、^異或、~非運(yùn)算,這于其他的編程語(yǔ)言類(lèi)似,不再詳述。
3.1.8 邏輯運(yùn)算符
與&&、或||,這于其他的編程語(yǔ)言類(lèi)似,不再詳述。只是需要提醒大家不要把它們和位邏輯運(yùn)算符混淆,這也是初學(xué)者最容易犯的錯(cuò)誤。
3.1.9 條件運(yùn)算符 ?:
這與C語(yǔ)言完全相同,具體不再解釋。
3.1.10 類(lèi)型轉(zhuǎn)換
我們?cè)诰帉?xiě)程序的時(shí)候經(jīng)常需要對(duì)變量的類(lèi)型進(jìn)行轉(zhuǎn)換,Java語(yǔ)言與其他的編程語(yǔ)言類(lèi)似,也提供兩種類(lèi)型轉(zhuǎn)換方式,即顯式轉(zhuǎn)換和隱式轉(zhuǎn)換。轉(zhuǎn)換的對(duì)象可分為兩類(lèi),一是基本類(lèi)型,二是對(duì)象類(lèi)型。
這里需要掌握這樣一個(gè)要點(diǎn)。對(duì)于基本類(lèi)型來(lái)說(shuō),凡是大轉(zhuǎn)小(以類(lèi)型的寬度考慮)需要使用顯式轉(zhuǎn)換,也就是需要在變量前面強(qiáng)制給出需要轉(zhuǎn)換成的類(lèi)型。而對(duì)小轉(zhuǎn)大來(lái)說(shuō),系統(tǒng)會(huì)自行進(jìn)行隱式轉(zhuǎn)換。
對(duì)于對(duì)象類(lèi)型來(lái)說(shuō),也與之類(lèi)似。凡是超類(lèi)轉(zhuǎn)子類(lèi)則需要使用顯式強(qiáng)制轉(zhuǎn)換,而子類(lèi)轉(zhuǎn)超類(lèi)系統(tǒng)可自行進(jìn)行隱式轉(zhuǎn)換。另外還需要注意的一點(diǎn)是,對(duì)于不在一個(gè)繼承關(guān)系樹(shù)上的類(lèi)要進(jìn)行強(qiáng)制轉(zhuǎn)換,Java編譯可通過(guò),但實(shí)際運(yùn)行會(huì)出錯(cuò)。
3.2 equals()方法
equals()方法實(shí)際與= =運(yùn)算符作用相同,也是用來(lái)比較相同類(lèi)型的兩個(gè)變量是否相同或相等。只是有點(diǎn)區(qū)別的是,對(duì)于String類(lèi)來(lái)說(shuō),它重載equals()方法,使用它不是比較兩個(gè)參考指針的區(qū)別,而是實(shí)際對(duì)所指向的具體內(nèi)容進(jìn)行比較,這也滿(mǎn)足了平時(shí)我們對(duì)比較字符串的實(shí)際需求。當(dāng)然,對(duì)其他類(lèi)來(lái)說(shuō),你也可以重載equals()方法,使其滿(mǎn)足你的實(shí)際需要,來(lái)比較兩個(gè)對(duì)象類(lèi)型的變量。
3.3 優(yōu)先級(jí)
與其他編程語(yǔ)言類(lèi)似的,Java語(yǔ)言的運(yùn)算符同樣涉及到優(yōu)先級(jí)別的問(wèn)題,書(shū)上130頁(yè)從高到低給出了所有運(yùn)算符的優(yōu)先級(jí)。建議大家,如果對(duì)某些運(yùn)算符之間的優(yōu)先級(jí)不是很清楚的時(shí)候,可以使用()來(lái)改變它們的優(yōu)先級(jí)關(guān)系。
3.4 方法的參數(shù)傳遞
最后,簡(jiǎn)單討論一下方法的傳遞的問(wèn)題。Java語(yǔ)言的參數(shù)傳遞類(lèi)型主要可以分為兩種,值傳遞和引用傳遞。借助C語(yǔ)言的概念,我們知道,第一種就是把參數(shù)值直接復(fù)制成方法體的參數(shù),這樣對(duì)方法體中的參數(shù)的改變不會(huì)影響到調(diào)用它的參數(shù)。而對(duì)于第二種,參數(shù)的引用(或者說(shuō)是個(gè)指針)被傳遞給了方法體的參數(shù),該引用用來(lái)訪問(wèn)調(diào)用中指定的實(shí)際參數(shù)。這樣,對(duì)方法體參數(shù)的改變將會(huì)影響到調(diào)用方法體的參數(shù)。
由于沒(méi)有指針的概念,Java的參數(shù)傳遞相對(duì)比較簡(jiǎn)單。對(duì)于一般的基本類(lèi)型來(lái)說(shuō),都采用的是值傳遞;而對(duì)于對(duì)象類(lèi)型則是使用的引用傳遞
posted on 2011-10-09 21:32
Java_liyadong 閱讀(227)
評(píng)論(0) 編輯 收藏