Java 運算符

運算符指明對操作數(shù)的運算方式泥张。組成表達式的Java有很多種。運算符按照其要求的操作數(shù)數(shù)目來分,可以有一元(單目)運算符默刚,二元(雙目)運算符和三元(三目)運算符,它們分別對應(yīng)于1個逃魄、2個荤西、3個操作數(shù)。運算符按其功能來分,有算術(shù)運算符皂冰、賦值運算符店展、關(guān)系運算符、邏輯運算符秃流、位運算符和其他運算符赂蕴。

下圖表示運算符的優(yōu)先級和結(jié)合性。

java運算符.png

注:結(jié)合性的左表示先算符號的左半部分舶胀,例如:1+2+3 按照先后應(yīng)該是(1+2)+3概说,右就表示先算符號的右半部分。

算數(shù)運算符( +嚣伐、-糖赔、*、/放典、%基茵、++拱层、 --)

算數(shù)運算符和平時在數(shù)學(xué)中的應(yīng)用基本一致根灯。

    /**
     * 算數(shù)運算符 測試
     */
    private static void arithmeticOperator() {
        int a = 102;
        int b = 5;
        int sum = a + b;            //兩數(shù)之和
        int difference = a - b;     //兩數(shù)之差
        int product = a * b;        //兩數(shù)之積
        int quotient = a / b;       //兩數(shù)之商的整數(shù)部分
        int remainder = a % b;      //余數(shù): a - b*(a/b)
        int c = a++;                //a 放在++之前表示 c 先取到a原來的值,之后a自增1,此時a = 103
        int d = ++a;                //a 放在++之后表示 a先自增1,即103+1=104,之后d取到現(xiàn)在a的值.
        System.out.println("a + b =" + sum);
        System.out.println("a - b =" + difference);
        System.out.println("a * b =" + product);
        System.out.println("a / b =" + quotient);
        System.out.println("a % b =" + remainder);
        System.out.println("a++ 的值" + c);
        System.out.println("++a 的值" + d);
    }
算數(shù)運算符

關(guān)系運算符(==、!=桃笙、<怎栽、>熏瞄、<=强饮、>=)

關(guān)系運算符用于比較兩個數(shù)值之間的大小,其運算結(jié)果為一個邏輯類型(boolean布爾類型)的數(shù)值行您。

    /**
     * 關(guān)系運算符 測試
     */
    private static void relationalOperator() {
        int a = 100;
        int b = 50;
        System.out.println("a 等于 b :" + (a == b));
        System.out.println("a 不等于b:" + (a != b));
        System.out.println("a 小于 b :" + (a < b));
        System.out.println("a 大于 b :" + (a > b));
        System.out.println("a 不小于b:" + (a >= b));
        System.out.println("a 不大于b:" + (a <= b));
        //注意: 當(dāng) == 在比較對象時,比較的是對象的內(nèi)存地址,而不是對象的屬性和值
        String s = "hello";
        String str = "hello";
        String s1 = new String(s);
        String s2 = new String(s);
        System.out.println("s 等于 str:" + (s == str));        //true, 如果String緩沖池內(nèi)存在與其指定值相同的String對象娃循,
        // 那么此時虛擬機將不為此創(chuàng)建新的String對象,而直接返回已存在的String對象的引用,和基本類型數(shù)據(jù)相似
        System.out.println("s1 等于 s2 :" + (s1 == s2));//false ,s1和s2是String兩個不同的對象.
        System.out.println(" s 等于 s1 :" + (s == s1)); //false ,s == str != s1 != s2

    }

關(guān)系運算符

注:"=="習(xí)慣用于原生(primitive)類型之間的比較,當(dāng)== 用于對象之間的比較時,比較的是對象的內(nèi)存地址

邏輯運算符(&、| 捞蚂、!姓迅、 ^丁存、 &&柱嫌、 ||)

邏輯運算符要求操作數(shù)的數(shù)據(jù)類型為布爾型编丘,其運算結(jié)果也是布爾型嘉抓。


邏輯運算符

需要注意的是:

  • 異或 ^ :兩邊相同時為flase,兩邊不同時為true杨赤;
  • & | 和 && ||的區(qū)別:& 和 && 都表示"與"疾牲,只是&&具有短路的功能植捎,也就是所當(dāng) && 左邊為false時就跳過右邊的判斷,不管右邊是什么結(jié)果都為false焰枢,減少計算機的開支;和&&類似济锄,當(dāng)||的左邊為true時暑椰,不管右邊是true還是false,結(jié)果都為true一汽。在編程時,建議使用&& 和|| 進行判斷操作低滩。

位運算符(&角虫、|委造、^、~枫虏、>>隶债、<<死讹、>>>)

位運算是以二進制位為單位進行的運算曲梗,其操作數(shù)和運算結(jié)果都是整型值虏两。

注意:

  • 0&1 = 0, 1&1 = 1 只有兩邊都是1結(jié)果才是1;
  • 0|1 = 1, 0|0 = 0 只有兩邊都是0結(jié)果才是0愧旦;
  • 0^0 = 0, 1^1 = 0 , 0^1 = 1, 1^0 = 1;
  • ~0 = 1,~1 = 0;
  • ">>" 是有符號的,即當(dāng) >>左邊的數(shù)是正數(shù)時定罢,缺失位用0填笤虫,>>左操作數(shù)是負(fù)數(shù)時,缺失位用1填祖凫。
  • << 和 >>>是無符號的琼蚯,即 << 和>>>左操作數(shù)無論正負(fù),缺失位都要用0填惠况;
/**
     * 位運算符 測試
     */
    private static void bitOperator() {
        int a = 56;
        int b = 78;
        String aStr = Integer.toBinaryString(a);    //a 轉(zhuǎn)為二進制是:0b0000_0000_0000_0000_0000_0000_0011_1000
        String bStr = Integer.toBinaryString(b);    //b 轉(zhuǎn)為二進制是:0b0000_0000_0000_0000_0000_0000_0100_1110
        int and = a & b;        //將a和b的二進制數(shù)同位進行&計算遭庶,and = 0b0000_0000_0000_0000_0000_0000_0000_1000
        int or = a | b;         //將a和b的二進制數(shù)同位進行|計算,or  = 0b0000_0000_0000_0000_0000_0000_0111_1110
        int xor = a ^ b;        //將a和b的二進制數(shù)同為進行^計算售滤,xor = 0b0000_0000_0000_0000_0000_0000_0111_0110
        int not = ~a;           //將a的二進制數(shù)進行~計算罚拟,       not = 0b1111_1111_1111_1111_1111_1111_1100_0111
        //注意:這里看出求int的二進制負(fù)數(shù)其實就是 其絕對值減1后二進制進行~計算台诗。
        //eg. a=50, 那么求-50的二進制數(shù),先將50-1=49赐俗, -50的二進制就是 ~49
        System.out.println("a 的二進制表示是:" + aStr);
        System.out.println("b 的二進制表示是:" + bStr);
        System.out.println("a & b 的結(jié)果是:" + and);
        System.out.println("a | b 的結(jié)果是:" + or);
        System.out.println("a ^ b 的結(jié)果是:" + xor);
        System.out.println("~a 的結(jié)果是:" + not);


        int b1 = 115;       //b1 的二進制數(shù)是: 0b0000_0000_0000_0000_0000_0000_0111_0011
        int b2 = -7;        //b2 的二進制數(shù)是: 0b1111_1111_1111_1111_1111_1111_1111_1001
        int b1_left_2 =  b1 << 2;   // 將b1左移2位末尾兩位用0填上得 0b0000_0000_0000_0000_0000_0001_1100_1100 (460)
        int b1_right_2 = b1 >> 2;   // 將b1右移2位開頭用0填上得     0b0000_0000_0000_0000_0000_0000_0001_1100 (28)
        int b2_left_2 =  b2 << 2;   // 將b2左移2位末尾兩位用0填上得 0b1111_1111_1111_1111_1111_1111_1110_0100 (-28)
        int b2_right_2 = b2 >> 2;   // 將b2右移2位來頭兩位用1填上得 0b1111_1111_1111_1111_1111_1111_1111_1110 (-2)
        //注意:>> 是有符號的拉队,即當(dāng) >>左邊的數(shù)是正數(shù)時,缺失位用0填阻逮,>>左操作數(shù)是負(fù)數(shù)時粱快,缺失位用1填。
        //      << 是無符號的叔扼,即 << 左操作數(shù)無論正負(fù)事哭,缺失位都要用0填;
        //      與 << 相對應(yīng)的是 無符號右移 >>>, 其缺失位也全都用0填瓜富。
        int b1_right_2_no_sign = b1 >>> 2;  // 將b1右移2位開頭用0填上得 0b0000_0000_0000_0000_0000_0000_0001_1100 (28)
        int b2_right_2_no_sign = b2 >>> 2;  // 將b2右移2位開頭用0填上得 0b0011_1111_1111_1111_1111_1111_1111_1110 (103740822)
        System.out.println("b1 左移2位得:" + b1_left_2);
        System.out.println("b1 右移2位得:" + b1_right_2);
        System.out.println("b2 左移2位得:" + b2_left_2);
        System.out.println("b2 右移2位得:" + b2_right_2);
        System.out.println("b1 無符號右移2位得:" + b1_right_2_no_sign);
        System.out.println("b2 無符號右移2位得:" + b2_right_2_no_sign);
    }
位運算符結(jié)果

賦值運算符

賦值運算符是 "=" 與二元算術(shù)運算符鳍咱、邏輯運算符和位運算符組合成簡捷運算符,從而可以簡化一些常用表達式的書寫与柑。

賦值運算符

其他運算符

三元運算符
三元運算符是軟件編程中的一個固定格式谤辜,語法是“條件表達式?表達式1:表達式2”价捧。
當(dāng)條件表達式為true時丑念,結(jié)果 “表達式1”,條件為false時结蟋,結(jié)果是“表達式2”
三元運算符可以簡化if else的書寫脯倚。

       String isLate = "";
        if(new Date().getHours() > 9){
            isLate = "遲到了";
        }else{
            isLate = "沒遲到";
        }
        System.out.println(isLate);

可以簡寫成

      String isLate = new Date().getHours() > 9 ? "遲到了" : "沒遲到";
      System.out.println(isLate);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市嵌屎,隨后出現(xiàn)的幾起案子推正,更是在濱河造成了極大的恐慌,老刑警劉巖编整,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舔稀,死亡現(xiàn)場離奇詭異乳丰,居然都是意外死亡掌测,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進店門产园,熙熙樓的掌柜王于貴愁眉苦臉地迎上來汞斧,“玉大人,你說我怎么就攤上這事什燕≌忱眨” “怎么了?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵屎即,是天一觀的道長庙睡。 經(jīng)常有香客問我事富,道長,這世上最難降的妖魔是什么乘陪? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任统台,我火速辦了婚禮,結(jié)果婚禮上啡邑,老公的妹妹穿的比我還像新娘贱勃。我一直安慰自己,他們只是感情好谤逼,可當(dāng)我...
    茶點故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布贵扰。 她就那樣靜靜地躺著,像睡著了一般流部。 火紅的嫁衣襯著肌膚如雪戚绕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天枝冀,我揣著相機與錄音列肢,去河邊找鬼。 笑死宾茂,一個胖子當(dāng)著我的面吹牛瓷马,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播跨晴,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼欧聘,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了端盆?” 一聲冷哼從身側(cè)響起怀骤,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎焕妙,沒想到半個月后蒋伦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡焚鹊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年痕届,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片末患。...
    茶點故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡研叫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出璧针,到底是詐尸還是另有隱情嚷炉,我是刑警寧澤,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布探橱,位于F島的核電站申屹,受9級特大地震影響绘证,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜哗讥,卻給世界環(huán)境...
    茶點故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一迈窟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧忌栅,春花似錦车酣、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至瑞驱,卻和暖如春娘摔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背唤反。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工凳寺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人彤侍。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓肠缨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親盏阶。 傳聞我的和親對象是個殘疾皇子晒奕,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,647評論 2 354

推薦閱讀更多精彩內(nèi)容