Java文法基礎之運算子學習筆記分享_java

來源:互聯網
上載者:User

一、運算子

運算子包括下面幾種:

算術運算子賦值運算子比較子邏輯運算子位元運算符三目運算子

最不常用的是位元運算符,但也是最接近電腦底層的。

1、算術運算子

(1)+的幾種用法:加法、正數、字串串連符

(2)除法的時候要注意一個問題:整數相除,只能得到整數。要想得到小數,可以將資料自身*1.0,即將資料自身先轉換為浮點型。

2、賦值運算子

符號 = += -= *= /= %=

註:=為基本的賦值運算子,其他的為擴充的賦值運算子

面試題:

(1)short s=1, s = s+1;

(2) short s=1, s+=1;

上面兩個代碼有沒有問題,如果有,哪裡有問題?

答案:代碼(1)是有錯誤的,會損失精度,byte,short在定義的時候,他們接收的其實是一個int類型的值。這個是自己做了一個資料檢測的,如果不再它們的範圍內,就報錯。效果如下:

代碼(2)沒有錯誤,因為:擴充的賦值運算子其實隱含了一個強制類型轉換。

也就是說,i += 1; 不是等價於 i = i + 1; 而是等價於 i = (i的資料類型)(s + 1);

3、關係運算子

注1:比較子的結果都是boolean型,也就是要麼是true,要麼是false。

注2:比較子“==”不能誤寫成“=” 。舉例:

4、邏輯運算子

(1)邏輯運算子用於串連布爾型運算式,在Java中不可以寫成3<x<6,應該寫成x>3 & x<6 。

(2)“&”和“&&”的區別?同理, “|”和“||”的區別?

A:最終結果都一樣。例如:A和B必須同時為真,A&B、A&&B的結果才為真。B:&&具有短路效果,左邊是false,右邊不執行。||具有短路效果,左邊是true,右邊不執行。

註:開發中常用的邏輯運算子: &&,||,!

(3)異或( ^ )與或( | )的不同之處是:當左右都為true時,異或的結果為false。

5、位元運算符:

雖然開發中用的不多,但會在很多源碼中看到,因為電腦底層的計算都是位元運算。

面試題1:實現兩個整數變數的交換

代碼如下:

/*  面試題:請自己實現兩個整數變數的交換*/class OperatorTest {  public static void main(String[] args) {    int a = 10;    int b = 20;        System.out.println("a:"+a+",b:"+b);        //方式1:使用第三方變數(開發中用的)        int c = a;    a = b;    b = c;    System.out.println("a:"+a+",b:"+b);    System.out.println("------------");            //方式2:用位異或實現(面試用)    //左邊:a,b,a    //右邊:a ^ b        a = a ^ b;    b = a ^ b; //a ^ b ^ b = a    a = a ^ b; //a ^ b ^ a = b    System.out.println("a:"+a+",b:"+b);            //方式3:用變數相加的做法        a = a + b; //a=30    b = a - b; //b=10    a = a - b; //a=20    System.out.println("a:"+a+",b:"+b);    *        //方式4:一句話搞定    b = (a+b) - (a=b); //b=30-20=10,a=20    System.out.println("a:"+a+",b:"+b);  }}

面試題2:請用最有效率的方式寫出計算2乘以8的結果。

答案:2 * 8等價於2 << 3

知識回顧:

<<:左移 左邊最高位丟棄,右邊補齊0 >>:右移 最高位是0,左邊補齊0;最高為是1,左邊補齊1 >>>:無符號右移 無論最高位是0還是1,左邊補齊0

6、三目運算子:

格式:(關聯運算式)?運算式1:運算式2;

如果條件為true,運算後的結果是運算式1;

如果條件為false,運算後的結果是運算式2;

樣本:

擷取兩個數中大數:

複製代碼 代碼如下:
int x=3,y=4,z;z = (x>y)?x:y;//z變數儲存的就是兩個數的大數。

擷取三個整數中的最大值:

//方式一:分兩步    //A:先比較a,b的最大值    //B:拿a,b的最大值在和c進行比較    int temp = ((a > b)? a: b);    //System.out.println(temp);    int max1 = (temp > c? temp: c);    System.out.println("max1:"+max1);        //方式二:一步搞定    int max2 = (a > b)?((a > c)? a: c):((b > c)? b: c);    //這種做法不推薦:    //int max2 = a > b?a > c? a: c:b > c? b: c;    //System.out.println("max2:"+max2);

建議用方式一 。另外,方式二中,第10行和第12行是一樣的,是三目運算子的嵌套使用。

比較兩個整數是否相等:

//比較兩個整數是否相等     int m = 100;    int n = 200;        //boolean flag = (m == n)? true: false;    boolean flag = (m == n);    System.out.println(flag);

二 、鍵盤錄入資料

我們目前在寫程式的時候,資料值都是固定的,但是實際開發中,資料值肯定是變化的,所以,我準備把資料改進為鍵盤錄入,提高程式的靈活性。

如何?鍵盤錄入資料呢?(目前先記住使用)

(1)導包(位置放到class定義的上面):import java.util.Scanner;

(2)建立鍵盤錄入對象:Scanner sc = new Scanner(System.in);

(3)通過對象擷取資料:int x = sc.nextInt();

代碼舉例:

以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援雲棲社區。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.