java 布尔逻辑运算符_Java运算符
Java語言提供許多操作符。操作符是特殊的符號(symbol),它對一個(gè)或者兩個(gè)、三個(gè)的操作數(shù)進(jìn)行運(yùn)算,然后返回一個(gè)結(jié)果,最簡單的就像我們一年級學(xué)到的+ -號。一般地,可以將運(yùn)算符分為四大類:算數(shù)運(yùn)算符、位運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符。下面詳細(xì)介紹:
內(nèi)容大概包括:
賦值運(yùn)算符
算數(shù)運(yùn)算符
位運(yùn)算符
關(guān)系運(yùn)算符
布爾邏輯運(yùn)算符
幾個(gè)特殊運(yùn)算符
運(yùn)算符優(yōu)先級
1. 賦值運(yùn)算符
賦值運(yùn)算符(=)是最常見的了,它將右邊的值賦給左邊,它的運(yùn)算優(yōu)先級是最低的。除了我們最熟悉的=以外,還有復(fù)合賦值+=、-=、*=、/=、%=、&=、|=、^=、<<=、>>=、>>>=。這些賦值語句優(yōu)先級一樣,都是最低的。可以使用下面形式的賦值語句:
int x = 10,z;
int y = z = x + 1;
相當(dāng)于z = x +1; y = z; 。
i = (j = k +1)/2;也是可以的,相當(dāng)于 j = k +1; i = j/2; 你可能還經(jīng)常遇到一種情況,要在測試條件中計(jì)算某個(gè)值,并且還要保存這個(gè)值以便繼續(xù)使用。如下:
double x;
if ( (x = Math.random()) < 0.5 ) {
System.out.println(x);
}
2. 算術(shù)運(yùn)算符
算數(shù)運(yùn)算符用于數(shù)學(xué)運(yùn)算,其操作數(shù)必須是數(shù)值類型(包括char類型),不能對boolean進(jìn)行算數(shù)運(yùn)算。算數(shù)運(yùn)算符如下表所示:
2.1 基本運(yùn)算
一元加號簡單地返回操作數(shù)本身的值,一元減號取反。加減乘除需要注意的就是除法,對于整數(shù)類型,除法不保留小數(shù)部分。+也可以用于字符串連接。求模返回除法操作的余數(shù),可用于整數(shù)也可以用于浮點(diǎn)數(shù)。
2.2 算數(shù)與賦值復(fù)合運(yùn)算(compound operator)
+=運(yùn)算符先進(jìn)行加法,然后賦值,比如 a += 2; 相當(dāng)于 a = a + 2; 其他的完全類似。通用格式如下:
var op= expression; 相當(dāng)于 var = var + expression;
符合運(yùn)算除了輸入更簡單方便外,虛擬機(jī)執(zhí)行復(fù)合賦值操作的效率也更高。
2.3 自增與自減
自增運(yùn)算將操作數(shù)加1,自減運(yùn)算將操作數(shù)減1。例如x = x + 1; 除了可以寫成 x += 1;以外,還可以更簡單地寫成x++;類似地x = x-1;可以寫成x--。自增和自減都有兩種形式,前綴和后綴。對于前綴形式,操作數(shù)先自增(自減),然后使用自增(自減)之后的值;后綴則先使用操作數(shù)原來的值,然后再自增(自減)。一個(gè)簡單的例子:
x = 10;
y = ++x; // y = 11;
y = x++ ;? // y =10;
看一個(gè)復(fù)雜一點(diǎn)的:
public class IncrementTest {
public static void main(String[] args) {
int i = 0, j;
i = i++;
System.out.println("i = " + i);
j = i++ + i;
System.out.println("i = " + i + ", j = " + j);
}
}
首先,對于i = i++; 首先提取i原來的值(0),然后i自增,此時(shí)i=1;到此完成了后綴形式的自增。接著執(zhí)行賦值語句,此時(shí)使用的i是最初提取出來的0,所以將0賦給i,覆蓋掉自增后的1.結(jié)果i為0;
對于 j = i++ + 1; 首先提取i的初值0,然后自增后i為1.接著運(yùn)算加法,復(fù)制給j,得到j(luò)=1;i=1;
3、位運(yùn)算符
Java中定義了幾個(gè)位運(yùn)算符,可以用于byte short char int long。位運(yùn)算符列在下表中:
可以看到,除了按位取反外,其他都都有賦值復(fù)合操作。
Java采用的是two's-complement進(jìn)行編碼。對于負(fù)數(shù),采用“取反加1”原則可以得到它的二進(jìn)制表示。
取反操作很簡單,將整數(shù)的二進(jìn)制形式按位取反,0-->1, 1-->0.
按位與、或、異或也都很簡單明了,重要的是弄明白整數(shù)的二進(jìn)制表示(bit pattern)。
左移:
將所有為向左移動(dòng)指定的位數(shù),每次移動(dòng),高階位(最左邊)被移出,右邊的位用0補(bǔ)充。這可能會導(dǎo)致位的丟失。而對于byte和short,Java在左移之前就自動(dòng)提升為int,所以如果不超過31位,不會丟失。每次左移相當(dāng)于乘以2.但是如果將二進(jìn)制1移進(jìn)高階位(31或63),結(jié)果會變?yōu)樨?fù)數(shù)。
右移:
右移將整數(shù)的二進(jìn)制形式向右移動(dòng)指定的位數(shù)。最左邊的位可能會被移出,對于>>右移,高階位使用右移之前的高階位填充,這稱為符號擴(kuò)展。每次執(zhí)行>>相當(dāng)于除以2并丟掉所有余數(shù),用這種方式實(shí)現(xiàn)除法更高效,但是要確保不會將任何位移出右端。
對于>>>,最高位不是采用原來的最高位填充,它總是用0填充,稱為無符號右移。
復(fù)合類型的位操作符跟算數(shù)運(yùn)算符完全類似,不再說明。
4. 關(guān)系運(yùn)算符
關(guān)系運(yùn)算符包括 ==、!=、>、>=、
關(guān)系運(yùn)算的結(jié)果是boolean類型。對于Java任何類型(包括基本類型和引用類型),都可以使用==和!=進(jìn)行相等性測試。其他的四個(gè)關(guān)系運(yùn)算法只適用于數(shù)值類型(包括char)。
5.布爾邏輯運(yùn)算符
下表中的布爾邏輯運(yùn)算符只能對boolean類型的操作數(shù)進(jìn)行操作:
很明了,不需要解釋。對于短路與、或。意思是如果第一個(gè)布爾值就能確定最終結(jié)果,后面的結(jié)果就無需再計(jì)算。例如,對于邏輯與,如果第一個(gè)操作數(shù)為false,那么結(jié)果肯定為false,無需計(jì)算右邊的。下面是一個(gè)有趣的例子:
if(denom != 0 && num/denom > 10)
如果denom為0,那么第一個(gè)表達(dá)式為false,后面不需要再計(jì)算,所以也就不會出現(xiàn)除數(shù)為0的異常。一個(gè)類似的例子:
if(car!=null && car.isSomething())
假設(shè)其中的isSomething返回布爾類型,這個(gè)也保證當(dāng)car為null的時(shí)候不會進(jìn)行空指針操作。
三元運(yùn)算符結(jié)構(gòu)為 expression ? expression1 : expression2? 其中expression必須為boolean類型,如果它為true,執(zhí)行expression1,否則expression2.相當(dāng)于一個(gè)if else。
6. 特殊運(yùn)算符
除了上面的三元運(yùn)算符比較特殊以外,還有類型轉(zhuǎn)換運(yùn)算符(),instanceof運(yùn)算符。
強(qiáng)制類型轉(zhuǎn)換我們已經(jīng)很熟悉了,instanceof運(yùn)算符用于判斷某個(gè)對象是否是某個(gè)類型的實(shí)例。例如,在實(shí)現(xiàn)Comparable接口中的compareTo方法時(shí),經(jīng)常要使用instanceof,下面是一個(gè)實(shí)現(xiàn):
public int compareTo(Object o) {
if (o instanceof Comp) {
Comp c = (Comp)o;
// do compare
}
return 0;
}
測試之后進(jìn)行轉(zhuǎn)換,更能確保類型安全。實(shí)現(xiàn)Object的equals方法中也經(jīng)常用到這個(gè)。
()也可以當(dāng)做一個(gè)操作符。
7. 運(yùn)算優(yōu)先級
各運(yùn)算符優(yōu)先級總結(jié)如下表:
說實(shí)話很難記住這些順序,一個(gè)好的原則是如果不確定執(zhí)行順序的時(shí)候,根據(jù)需要加上(),可以使得代碼更加清晰,降低模糊性。而且使用圓括號不會降低程序性能。
總結(jié)
以上是生活随笔為你收集整理的java 布尔逻辑运算符_Java运算符的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android xml 列表展示,And
- 下一篇: html ace编辑器,Tiny-edi