首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

計算機程序思維邏輯(三):運算符全解析——算術、比較、邏輯與優先級陷阱

     編輯:Java 綜合教學

運算符三大類別

  • 算術運算:+ - * / % ++ --
  • 比較運算:> >= < <= == !=(結果為 boolean)
  • 邏輯運算:& | ! ^ && ||(僅適用 boolean)

算術運算關鍵細節

結果溢出風險

int a = 2147483647 * 2; // 結果 -2 (溢出)
long b = 2147483647 * 2L; // 正確:至少一個操作數標記 L

整數除法截斷


double d = 10 / 4;        // 2.0 (先整除再賦值)
double d = 10 / 4.0;      // 2.5
double d = 10 / (double)4; // 2.5

浮點數精度缺失


float f = 0.1f * 0.1f;  // 0.010000001
double d = 0.1 * 0.1;   // 0.010000000000000002

原因:二進制無法精確表示十進制小數(如 0.1),後續文章將深入 IEEE 754 表示解析。

自增/自減:前綴 vs 後綴

代碼等效邏輯說明
b = a++ - 1b = a - 1; a = a + 1;先用原值運算,再自增
c = ++a - 1a = a + 1; c = a - 1;先自增,再用新值運算
arrA[i++] = arrB[++j]j++; arrA[i] = arrB[j]; i++;混合使用極易讀錯,建議拆行

比較運算陷阱

  • == vs =:前者比較,後者賦值。
  • 陣列比較:== 比較引用地址,非內容。內容比較需逐元素或用 Arrays.equals()。
  • 字符比較:基於 Unicode 編碼值。

邏輯運算:短路特性


boolean a = true; int b = 0;
boolean flag = a | (b++ > 0);  // b 變 1,右邊仍執行
boolean flag = a || (b++ > 0); // b 仍 0,短路跳過右邊

&&、|| 具備短路求值,能避免不必要計算及空指針風險(如 obj != null && obj.method())。

運算符優先級與括號

大多符合直覺(算術 > 比較 > 邏輯)。不確定時加括號,明確表達意圖,提升可讀性。

本章遺留懸念(下章揭曉)

  1. 正整數相乘為何變負數?(補碼表示)
  2. 浮點運算為何不精確?(IEEE 754 二進制科學計數法)
  3. 字符類型為何能參與算術/比較?(本質是整數編碼)

關注「老馬說編程」獲取最新深度解析。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved