1. 程式人生 > >運算子的概念及基本使用

運算子的概念及基本使用

一:運算子的分類

1.算術運算子

①加減運算子: 對基本數值型別的資料進行加減運算,結果的資料型別取決於兩個運算元的資料型別。 當兩個運算元型別為char,byte,short 和int型別時,其運算結果的資料型別必為int 。 "+"還用於連線兩個物件的運算,將用於連線兩個字串連線起來。

int a=a+1;//把(a+1)的值賦值給a
String str=”abc”+”bcd”;//連線兩個字串

②乘法運算子: 乘運算子用於對兩個基本數值型別的資料進行相乘運算,其運算的資料型別取決於兩個運算元的資料型別。 當兩個運算元型別為char , byte , short,int型別時,其運算結果資料型別必為int。

Int a=b*c; // b=10,c=10a=100

③除法運算子: 除運算用於兩個基本數值的型別資料進行相除運算。當相除的兩個運算元均為整數時,如果運算結果為整數,則將運算結果作為返回值返回; 如果運算結果不為整數,則運算結果整數部分作為返回值返回。當相除的兩個運算元只要有一個為浮點數時,則運算結果必為浮點數。 當除運算中右運算元取值為0時,如果運算元均為整數,則會丟擲算術異常ArithmeticException; 如果運算元中至少有一個為浮點數時,則結果為一個Infinity值。

Int a=b/c; // b=10,c=10a=1

④取模運算子: 取模運算%用於從除法中獲得兩數相除的餘數。取模運算的運算元既可以是整數,也可以是浮點數, 取模的過程實際是用左運算元連續減去右運算元,直到相減的結果小於右運算元,此時的結果即為餘數。 此過程適於運算元中有浮點數和負數的情況。 當取模運算中右運算元取值為0時,如果運算元均為整數,則會丟擲算術異常ArithmeticException, 因為取模運算歸根結底為算術除法運算;如果運算元至少有一個浮點數,則結果為一個NAN(Not a Number)值。 取模運算結果的正負符號完全取決於左運算元,即和左運算元的正負符號一致。

2.移位運算子:

Java定義了幾個位運算子,分別為帶符號左移位運算子<<,帶符號右移位運算子>>和無符號右移位運算子>>>,
它可以應用到整數型別,長型,整型,短整型,字元和位元組。位運算子作用於位,並執行逐位操作.

(1).左移運算子用“<<”表示,是將運算子左邊的物件,向左移動運算子右邊指定的位數,並且在低位補零。其實,向左移n 位,就相當於乘上2 的n 次方

public class data{
public static void main(String[] args){
int a=2;
int b=2;
system.out.
println("a 移位的結果是:"+(a<<b));} } a 移位的結果是:8

(2).右移運算子: 右移運算子用符號“>>>”表示,是將運算子左邊的物件向右移動運算子右邊指定的位數,並且在高位補0,其實右移n 位,就相當於除上2 的n 次方。

public class data{
public static void main(String[] args){
       int a=16;
       int b=2;
       System.out.println("a 移位的結果是:"+(a>>>b));
}}
a 移位的結果是:4

(3).帶符號的右移運算子: 帶符號的右移運算子用符號“>>”表示,是將運算子左邊的運算物件,向右移動運算子右邊指定的位數。如果是正數,在高位補零,如果是負數,則在高位補1。

public class data17{
public class data19{
public static void main(String[] args){
       int a=16;
       int c=-16;
       int b=2;
       int d=2;
       System.out.println("a 的移位結果:"+(a>>b));
       System.out.println("c 的移位結果:"+(c>>d));
}}
a 的移位結果:4
c 的移位結果:-4

3.比較運算子:

Java語言共提供了6種比較運算子,它們分別為小於,小於等於,大於,大於等於,等於,不等於。
這6個比較運算子適合所有基本型別數值之間的比較,但布林型值只能與布林型值比較,比較運算的結果是一個布林型值,
整個比較表示式可以作為邏輯運算子的運算元,除了可以用於基本型別數值之間的比較,也可以應用於物件變數之間的比較。
字元型值可以作為比較運算元與其他基本型別數值(除布林型值外)進行比較,因為每個字元都有一個對應的標準字元碼。
當字元型值進行比較運算時,實際比較的是該字元對應的一個整數字符碼。

(1)== 和!= 運算子:關係運算符等於(==)和不等於(!=)不僅可以用於基本型別數值之間的比較,而且可以用於引用型之間的比較,但是這種引用型之間的比較不同於基本型別數值之間的比較,是物件的引用值,即記憶體地址。兩個引用變數之間的等於比較是在判斷這兩個變數是否引用了同一個物件。如果需要判斷兩個物件的內容是否相等,則應該使用equals()方法。在java.lang.Object中定義的equals()方法用來比較兩個物件的內容是否相等。

int a=1,b=1;
a==b的結果是true
String s1="123",s2="123";
s1==s2的結果是true
String s1="123";String s2=new String("123");
s1==s2的結果是false;

(2)> 或 >= 運算子:分別對應大於和大於等於,根據比較的結果返回值為true或false。

Boolean a=c<b; //c=20,b=10—>a=false

(3)< 或 <= 運算子:分別對應小於和小於等於,根據比較的結果返回值為true或false。

Boolean a=c>b; //c=20,b=10—>a=true

4.位運算子

Java語言中共提供了4種按位運算子,分別為按位與(&), 按位或(|),按位異或(^)和按位非(~),這四個運算子適合所有整型資料。
進行按位運算時,總是先將字元型、位元組型、短整型值轉換為整型再進行位運算。對於布林型運算只有按位非(~)不能用於布林型數值。
其他3種位運算都可以把布林型數值當作一個具有一位值進行按位運算。
布林型值為true對應為1,false對應為0,儘管位運算可以應用於布林型,但不能將布林型值和其他整數型值混合使用,
如混合使用,將發生型別轉換錯誤,因為布林型值和其他基本型別之間不能進行相互轉換。

(1)& 運算子:&(與)運算子對於兩個整型運算元中對應的位執行操作。具體見表3.1。 表3.1 與運算 (2)| 運算子:|(或)運算子對於兩個整數型運算元中對應的位執行操作。具體見表3.2。 表3.2 或運算 在這裡插入圖片描述 (3)^ 運算子:^(異或)運算子對於兩個整數型運算元中對應的位執行操作。具體見表3.3。 表3.3 異或運算 在這裡插入圖片描述

5.邏輯運算子

邏輯運算子共有三種:!(邏輯取反),&&(邏輯與),||(邏輯或)。它們的運算元型別必須是一個布林值或布林表示式。

(1)!運算子:

public static void main(String[] args)
 int a=2;
 System.out.println("a 非的結果是:"+(~a));
}}

(2)&& 運算子:類似按位與的公式。左右運算元必須是一個布林值或是一個布林表示式。該運算子存在邏輯短路的現象:A&&B&&C。如果A為false,那麼後面的表示式就不運算了;

public class data{
public static void main(String[] args){
 int a=129;
 int b=128;
 System.out.println("a 和b 與的結果是:"+(a&b));
}}
執行結果
a 和b 與的結果是:128

(3)|| 運算子:類似按位與的公式。左右運算元必須是一個布林值或是一個布林表示式。該運算子存在邏輯短路的現象:A||B||C。如果A為true,那麼後面的表示式就不運算了。

public class data{
public static void main(String[] args)
 int a=129;
 int b=128;
 System.out.println("a 和b 或的結果是:"+(a|b));
}}
執行結果
a 和b 或的結果是:129

6.條件運算子

是Java語言中唯一的一個三目運算子(三個運算元)相當於if…else。

格式:

條件值?表示式1: 表示式2

整個表示式的值、表示式1的值、表示式2的值的型別必須一致。當條件值為true,那麼整個表示式的最終結果為表示式1的結果;如果為false,最終結果就是表示式2的結果。條件運算子最終的結果型別,是由兩個子表示式來決定的,兩個子表示式之間進行型別轉換。轉換規則滿足向取值範圍寬的方向轉換。

public class Test {
public static void main(String args[]){
      int a , b;
      a = 10;
      b = (a == 1) ? 20: 30;
      System.out.println( "Value of b is : " +  b );
      b = (a == 10) ? 20: 30;
      System.out.println( "Value of b is : " + b );
   }
}
結果:
Value of b is : 30
Value of b is : 20

7.賦值運算子

將具體數值賦給變數時,將使用賦值運算子。
賦值運算子有:=,+=,-=,*=,/=,%=,>>=,<<=,&=,^=,|=

格式: 型別 變數名=值

8.複合運算子

前面的有些運算子可以同賦值運算子進行不同的組合.

在這裡插入圖片描述

二:運算子的優先順序

Java語言中的運算子有著不同的級別,優先順序高的運算子先被執行,具體運算子的級別由高到低排列如下: 單運算元運算子 > 算術運算子 > 移位運算子 > 比較運算子號 > 位運算子 >邏輯運算子 > 條件運算子 > 賦值運算子。