Java之路(二) 操作符
操作符比較簡(jiǎn)單,這里只點(diǎn)一下注意事項(xiàng)和要點(diǎn),請(qǐng)牢記。
操作符接受一個(gè)或多個(gè)參數(shù),并生成一個(gè)新值。
Java中,幾乎所有的操作符都只能操作基本類型。
例外是 = == 和 !=,它們可以操作所有的對(duì)象。此外,String類支持+和+=。
1.賦值 =
基本類型存儲(chǔ)了實(shí)際的數(shù)值,所以為基本類型變量賦值是將一個(gè)地方的內(nèi)容賦值到變量所表示的地址。
為對(duì)象賦值時(shí),實(shí)際操作的是引用。我們?nèi)缦聢D所示,假設(shè)T1和T2是同一個(gè)類的兩個(gè)對(duì)象的引用,分別指向各自的對(duì)象。開(kāi)始如A所示,當(dāng)執(zhí)行賦值T1=T2后,如B所示,可以看到,引用T1和T2都指向了T2指向的對(duì)象,而T1指向的對(duì)象卻無(wú)法再訪問(wèn)了,這種現(xiàn)象叫做別名現(xiàn)象。
如何避免別名現(xiàn)象呢?
可以使用這種方式賦值,T1.length=T2.length,T1.width=T2.width,可以保證兩個(gè)對(duì)象彼此獨(dú)立。但是這違背了面向?qū)ο蟮脑O(shè)計(jì)原則。
與此相似,當(dāng)向一個(gè)方法傳遞對(duì)象時(shí),實(shí)際上傳遞的也是引用,也會(huì)造成別名問(wèn)題。
2.算數(shù)操作符
二元操作符:+ - * / % += -= *= /=
一元操作符:+ -
一元減號(hào)用于轉(zhuǎn)變數(shù)據(jù)的符號(hào)。一元加號(hào)只是為了與一元減號(hào)相對(duì)應(yīng),它唯一的用處是將較小的類型提升為int。
3.自增和自減
有前綴式和后綴式兩種,是除了涉及賦值的操作符以外,唯一具有副作用的操作符。
4.關(guān)系操作符
關(guān)系操作符生成布爾結(jié)果,計(jì)算的是操作數(shù)中的值之間的關(guān)系。
關(guān)系操作符:< > <= >= == !=
==和!=適用于所有的基本數(shù)據(jù)類型,其他比較操作符不適用于布爾類型。
基本類型之間的比較使用 == 和 != 即可。
當(dāng)比較兩個(gè)對(duì)象的實(shí)際內(nèi)容時(shí),必須使用所有對(duì)象都適用的equals()方法(不適用于基本類型),使用 == 和 != 比較的是對(duì)象的引用。
注意:equals()默認(rèn)行為是比較引用,可以進(jìn)行對(duì)象實(shí)際內(nèi)容的比較是因?yàn)樵谙嚓P(guān)類庫(kù)中做了覆蓋,因此當(dāng)我們創(chuàng)建自己的類時(shí),必須在類中覆蓋equals()方法。
5.邏輯操作符
邏輯操作符:&& || !
根據(jù)參數(shù)的邏輯關(guān)系,生成一個(gè)布爾值。
只能應(yīng)用于布爾值。
不可以將非布爾值當(dāng)做布爾值在邏輯表達(dá)式中使用。
具有短路性質(zhì)。
6.直接常量
有時(shí)候編譯器不知道創(chuàng)建什么樣的類型,可以用與直接常量相關(guān)的字符來(lái)指導(dǎo)編譯器。
如 0xff,0177,100f,100L,10D等。
指數(shù)的表示方法:1.39E-43f。
7.按位操作符
按位操作符:& | ~ &= |= ^=
操作位。
8.移位操作符
移位操作符:<< >> <<= =>>
注意:對(duì)char,byte和short類型的數(shù)值進(jìn)行移位處理前,會(huì)將它們轉(zhuǎn)換成int類型,而且得到的結(jié)果也為int類型。只有數(shù)值右端的低5位有用(int值的范圍)。同理,long類型的數(shù)值進(jìn)行移位操作后,得到的結(jié)果右端的低6位有用。
9.三元操作符
三元操作符: ? :
10.字符串操作符
字符串操作符: + +=
用以連接不同的字符串。
如果表達(dá)式以一個(gè)字符串起頭,后續(xù)的所有操作數(shù)都必須是字符串型,
技巧:有時(shí)會(huì)用一個(gè)空的String + 基本類型變量,以執(zhí)行對(duì)基本類型的字符串的轉(zhuǎn)換,不用顯示地調(diào)用Integer.toString()。
11.類型轉(zhuǎn)換
截尾:將一個(gè)浮點(diǎn)值轉(zhuǎn)換為整型值時(shí),會(huì)舍去小數(shù)部分。
舍入:想在將一個(gè)浮點(diǎn)值轉(zhuǎn)換為整型值時(shí)進(jìn)行四舍五入的操作,要使用java.lang.Math()中的round()方法。
round方法是java.lang的一部分,不需要額外導(dǎo)入。
提升:對(duì)基本數(shù)據(jù)執(zhí)行算數(shù)運(yùn)算或者按位運(yùn)算時(shí),只要類型比int小(char,byte,short),運(yùn)算前就將其自動(dòng)轉(zhuǎn)換為int,結(jié)果也為int類型。一般而言,表達(dá)式中出現(xiàn)的最大的數(shù)據(jù)類型決定了表達(dá)式最終結(jié)果的數(shù)據(jù)類型。如果想把結(jié)果賦給較小的數(shù)據(jù)類型,需要使用類型轉(zhuǎn)換,這可能造成信息丟失。
12.Java沒(méi)有sizeof
C和C++中使用sizeof()的最大原因是為了移植。因?yàn)椴煌瑪?shù)據(jù)類型在不同機(jī)器上可能有不同的大小,在進(jìn)行一些與存儲(chǔ)空間有關(guān)的運(yùn)算時(shí),必須知道具體類型有多大,sizeof()可以實(shí)現(xiàn)。
Java中數(shù)據(jù)類型的大小固定,在所有機(jī)器中大小相同,因此不需要sizeof(),它已經(jīng)被設(shè)計(jì)在語(yǔ)言中。
總結(jié)
以上是生活随笔為你收集整理的Java之路(二) 操作符的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 论文笔记 - RETRIEVE: Cor
- 下一篇: jprofiler 查看程序内存泄露