操做符定義
操做符(也叫作運算符)是對一個(unary)、兩個(binary)或三個(ternary)操做數執行特定操做的特殊符號,而且在操做完後返回結果。java
操做符優先級
下表中是按優先級順序列出的操做符。操做符所在行越靠上,其優先級越高。優先級較高的運算符在優先級相對較低的運算符以前進行求值。同一行上的操做符具備相同的優先級。當具備相同優先級的操做符出如今同一表達式中時,求值順序的規則爲: 除了賦值操做符以外的全部二元操做符都是從左到右進行計算的; 賦值操做符從右到左進行求值。
express
操做符功能分類及其轉換規則
轉換規則
在經常使用的二元操做符(如+、-、/、*、%、<、>、<=、>=、!=、==)當中,在操做數類型限於基本類型及其包裝類型以內(不包括boolean和Boolean)時,那麼操做符中出現的操做數優先級爲double>float>long>int,即只要操做數中至少有一個是這四種類型中其中之一(如兩個都是選擇其中更優先的),則會將另外一操做數提高爲該類型(如不是該類型的狀況下),如兩操做數都不在這四種類型之中時,在執行操做以前會將兩操做數都提高爲int類型再執行操做。
也可按功能來對操做符進行分類,以下api
簡單賦值操做符/Simple Assignment Operator
操做符 |
功能 |
= |
Simple assignment operator |
算術運算符/Arithmetic Operators
操做符 |
功能 |
+ |
Additive operator (also used for String concatenation) |
- |
Subtraction operator |
* |
Multiplication operator |
/ |
Division operator |
% |
Remainder operator |
一元操做符/Unary Operators
操做符 |
功能 |
+ |
Unary plus operator; indicates positive value (numbers arepositive without this, however) |
- |
Unary minus operator; negates an expression |
++ |
Increment operator; increments a value by 1 |
-- |
Decrement operator; decrements a value by 1 |
! |
Logical complement operator; inverts the value of a boolean |
比較和關係操做符/Equality and Relational Operators
操做符 |
功能 |
== |
Equal to |
!= |
Not equal to |
> |
Greater than |
>= |
Greater than or equal to |
< |
Less than |
其中==和!=操做符不光適用於全部基本類型,還適用於全部引用類型的變量,但當其用於引用類型的變量時比較的是兩個引用類型是否指向相同的對象或者都指向null。要想比較兩個對象中的內容是否相同,則須要經過重寫繼承自Object的equals方法(同時還要重寫hashCode方法,詳見effective java),例如Integer中的equals和hashCode方法就是重寫了的,由於Object中的equals方法用的仍是==。
ps:關於hashCode,Object中的hashCode方法是爲不一樣的對象返回出了不一樣的哈希值,雖然按照約定上不必這樣作(約定參看api的hashCode()方法)。dom
條件操做符/Conditional Operators
操做符 |
功能 |
&& |
Conditional-AND |
|| |
Conditional-OR |
? : |
Ternary (shorthand forif-then-else statement) |
類型比較操做符/Type Comparison Operator
操做符 |
功能 |
instanceof |
Compares an object to a specified type |
按位和移位操做符/Bitwise and Bit Shift Operators
操做符 |
功能 |
~ |
Unary bitwise complement |
<< |
Signed left shift 左移,低位補0 |
>> |
Signed right shift 右移,若符號爲正(0),高位插0,符號爲負(1),高位插1 |
>>> |
Unsigned right shift 無符號右移,高位插0(不管符號位爲正(0)仍是負(1)) |
& |
Bitwise AND 與 |
^ |
Bitwise exclusive OR 異或 |
| |
Bitwise inclusive OR 或 |
其中^、&、|能夠對整數及其對應的包裝類型進行按位操做,也能夠對布爾類型及其包裝類型進行按位操做(由於boolean類型在編譯後是使用int類型來代替的,javap後能夠看到false用0表明,true用1表明),而且避免了使用邏輯或和邏輯與時會出現的短路現象。
移位操做符可對整數進行移位,若是對於char、byte、或者short類型的數值進行移位處理,那麼在移位處理以前,他們會被先轉換爲int類型,而且獲得的結果也是一個int類型的值。但對long類型的數值進行移位處理後,獲得結果仍是一個long類型的數值。這正符合了前面鎖介紹的轉換規則。
注意:移位運算符的右操做數只有低5位是有效的,也就是說最多移位31位(即11111)。即a<<b等價於a<<(b%32),a>>>=b等價於a>>>=(b%32)。此外,數值在計算機內存中都是以補碼的形式存儲,因此數字的二進制表示形式也稱爲「有符號的二進制補碼」this
基本數據類型之間的轉換
Java容許咱們將任何基本數據類型轉換成別的基本數據類型(這裏的基本類型是除了boolean以外的)。這裏的轉換能夠是隱式類型轉換和顯式類型轉換。
如上圖所示,基礎類型之間按照箭頭指向的方向能夠進行自動轉換,如想要按照箭頭相反的方向轉換,則要進行顯式強制轉換。spa
涉及到一些經常使用方法
方法 |
功能 |
Math.random()或者new Random(long seed).nextDouble() |
返回下一個僞隨機數,它是取自此隨機數生成器序列的、在 0.0 和 1.0 之間均勻分佈的 double 值。 |
new Random(long seed).nextInt(int n) |
返回一個僞隨機數,它是取自此隨機數生成器序列的、在 0(包括)和指定值(不包括)之間均勻分佈的 int 值。 |
Integer.toBinaryString(int i) |
以二進制(基數 2)無符號整數形式返回一個整數參數的字符串表示形式。 |