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