入門篇-其之七-Java運算子

vbcjnmkk發表於2024-08-31

入門篇-其之七-Java運算子(下)
合集 - iCode504的Java學習空間(13)
1.
入門篇-其之一-第一個Java程式
2023-07-23
2.
入門篇-其之二-Java基礎知識
2023-09-04
3.
入門篇-其之三-基本資料型別及其轉換
2023-09-06
4.
入門篇-其之四-字串String的簡單使用
2023-09-25
5.
入門篇-其之五-Java運算子(上)
2023-10-09
6.
入門篇-其之六-Java運算子(中)
2023-10-24
7.
入門篇-其之六-附錄一-以Java位元組碼的角度分析i++和++i
2023-10-23
8.
入門篇-其之七-Java運算子(下)
2023-10-27
9.
入門篇-其之八-常用類的簡單使用
2023-11-06
10.
入門篇-其之九-流程控制之條件判斷
2023-11-23
11.
入門篇-其之十-流程控制之迴圈結構
2023-12-16
12.
入門篇-其之十一-流程控制之break和continue關鍵字
2023-12-20
13.
陣列篇-其之一-陣列的概念與一維陣列
01-18
收起
一、三元運算子的使用
三元運算子(也稱作三目運算子),使用:和?表示,其格式為:布林表示式 ? 表示式1 : 表示式2

如果布林表示式的計算結果是true,那麼執行表示式1;否則,如果布林表示式的計算結果是false,則執行表示式2。
表示式1和表示式2計算結果的資料型別必須要和左側變數定義的資料型別保持一致。例如:表示式1和表示式2的計算結果都是double型別,那麼左側定義的變數型別也是double。
以下是三元運算子作用原理圖:

未標題-1

以下是三元運算子在程式碼中的使用:

/**

  • 三元運算子的使用

  • @author ZhaoCong

  • @date 2023-10-25 11:57:21
    */
    public class Ternary {
    public static void main(String[] args) {
    byte byteValue1 = 20;
    byte byteValue2 = 30;

     byte result1 = byteValue1 > byteValue2 ? byteValue1 : byteValue2;
     System.out.println("result1 = " + result1);
    
     double doubleValue1 = 40.13;
     double doubleValue2 = 30.28;
    
     double result2 = doubleValue1 == doubleValue2 ? doubleValue1 : doubleValue2;
     System.out.println("result2 = " + result2);
    
     String strValue1 = "";
     String result3 = strValue1.length() == 0 ? "strValue1的長度是0" : "strValue1的長度不是0";
     System.out.println("result3 = " + result3);
    

    }
    }
    執行結果:

image-20231027105629436

三元運算子可以巢狀使用,但不推薦,原因是可讀性變差。

String strValue = "iCode504";
int length = strValue.length();
// 不推薦巢狀的寫法
String result = length > 0 ? length < 10 ? "strValue的長度在0~10之間" : "strValue的長度超過10" : "strValue的長度為0";
System.out.println("result = " + result);
巢狀式寫法做進一步簡化處理:

String strValue = "iCode504";
int length = strValue.length();
String result = length > 0 && length < 10 ? "strValue的長度在0~10之間" : "strValue的長度不在0~10之間";
System.out.println(result);
二、三元運算子和if語句的區別
共同點:三元運算子和if語句的作用都是用作條件判斷。但二者也存在一些差別:

  1. 語法層面:在大多數情況下,三元運算子語法是一行語句,if語句可能是多行。例如:判斷一個字串的長度是否為0,以下分別是三元運算子和if語句的寫法:

// 三元運算子寫法
String strValue = "iCode504";
String result = strValue.length() == 0 ? "strValue的長度為0" : "strValue的長度不為0";
// if寫法
String strValue = "iCode504";
String result;
if (strValue.length() == 0) {
result = "strValue的長度為0";
} else {
result = "strValue的長度不為0";
}
2. 程式碼可讀性:對於簡單的條件判斷,使用三元運算子確實可以簡化程式碼,但是如果是複雜條件或者巢狀,那麼三元運算子會讓程式碼變得更加複雜難以理解。

  1. 靈活性:if語句中可以在程式碼塊中放入更多的表示式,但是三目運算子的表示式只能存在一個。

總體來說,三目運算子和if語句都有各自的優點和使用場景。在簡單的情況下,使用三目運算子比較方便;在複雜情況下,使用if語句更合適。

三、運算子的優先順序
前面學過和很多的運算子:例如算術運算子、比較運算子、邏輯運算子等等,如果這些運算子進行混合運算時,存在著一個優先順序,即誰先計算,誰後計算的問題。數學中存在這樣一條規定:先乘除,後加減。也就是說,乘和除是同一級別,二者的計算級別要比加和減的級別高。這條規定在Java中也完全適用。

以下是運算子的優先順序順序表(由高到低,這張表瞭解即可,不需要額外記憶):

運算子 關聯性
() [] 從左向右
! ~ ++ -- 正負號 從右向左

  • / % 從左向右
    • 從左向右
      << >> >>> 從左向右
      < <= > >= instanceof 從左向右
      == != 從左向右
      & 從左向右
      ^ 從左向右
      | 從左向右
      && 從左向右
      || 從左向右
      ?: 從右向左
      = += -= *= /= %= &= |= ^= <<= >>= >>>= 從右向左
      使用括號()可以提升運算子的優先順序。例如:
      //程式碼效果參考:https://www.h3cw.com/sitemap/post.html
      int value1 = 30;
      int value2 = 28;
      int value3 = 17;
      int result1 = value1 * value2 + value3; // 先乘除,後加減
      int result2 = value1 * (value2 + value3); // 有括號的優先計算
      原本加號的運算等級要比乘號的等級要低,但是給加法表示式加上括號以後,加法表示式優先計算,然後再計算乘除法。

合集: iCode504的Java學習空間
標籤: Java
好文要頂 關注我 收藏該文 微信分享
iCode504
粉絲 - 5 關注 - 1
+加關注
00
升級成為會員
« 上一篇: 入門篇-其之六-Java運算子(中)
» 下一篇: Intellij IDEA安裝與配置教程(Windows版)
posted @ 2023-10-27 17:18 iCode504 閱讀(55) 評論(0) 編輯 收藏 舉報
重新整理評論重新整理頁面返回頂部
發表評論 升級成為園子VIP會員
編輯
預覽
支援 Markdown

自動補全
退出 訂閱評論 我的部落格

[Ctrl+Enter快捷鍵提交]

【推薦】輕量又高效能的 SSH 工具 IShell:AI 加持,快人一步
【推薦】100%開源!大型工業跨平臺軟體C++原始碼提供,建模,組態!
【推薦】天翼雲2核4G雲伺服器加購同規格資料庫,3個月僅售21.7元
【推薦】2024阿里雲超值優品季,精心為您準備的上雲首選必備產品
【推薦】會員力量,點亮園子希望,期待您升級成為部落格園VIP會員

編輯推薦:
· [WPF]資料繫結時為何會出現 StringFormat 失效
· OpenTelemetry 實戰:從零實現應用指標監控
· 使用 asp.net core 8+vue3 實現高效音視訊通話
· [kernel] 帶著問題看原始碼 —— 指令碼是如何被 execve 呼叫的
· 兩個存在包名與類名均相同的Jar包,要在工程中同時使用怎麼辦?
閱讀排行:
· 程式設計師失業日記4:半個月拿下4個offer
· .NET 攝像頭採集
· 從程式碼到產品,我的IT職業成長之路
· 一個小小空格問題引起的bug
· 服務重啟了,如何保證執行緒池中的資料不丟失?

相關文章