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

Java 運算符與類型轉換完全指南:優先級、位運算、自動提升與強制轉型

     編輯:Java 相關知識

運算符分類與優先級(高→低)

  1. 後綴:expr++ expr--、() [] .
  2. 一元:++expr --expr +expr -expr ~ !、(type) new
  3. 乘除模:* / %
  4. 加減:+ -
  5. 移位:<< >> >>>
  6. 關系:< <= > >= instanceof
  7. 相等:== !=
  8. 按位與:&
  9. 按位異或:^
  10. 按位或:|
  11. 邏輯與:&&(短路)
  12. 邏輯或:||(短路)
  13. 三元:? :
  14. 賦值:= += -= *= /= %= &= ^= |= <<= >>= >>>=(右結合)

括號最高,可任意改變默認順序。同優先級按結合方向(多為左→右,賦值右→左)。

關鍵運算符詳解

乘方

無 **,用 Math.pow(double a, double b) 返回 double。整數乘方可自寫快速冪或用 BigInteger.pow()。

自增自減

int a = 5;
int b = a++; // b=5, a=6(先用後增)
int c = ++a; // a=7, c=7(先增後用)

表達式語句獨立行時 a++ 和 ++a 效果相同,但在複合表達式中語義截然不同。

位運算符

  • & 按位與(掩碼取位)
  • | 按位或(置位)
  • ^ 按位異或(翻轉、交換變量 a^=b^=a^=b)
  • ~ 按位取反
  • << 左移(乘 2n,補 0)
  • >> 右移(除 2n,符號位擴展)
  • >>> 無符號右移(高位補 0,**無 <<<**)

位運算僅適用於整數類型(int、long、short、char、byte),操作前自動提升為 int。

instanceof

檢查對象是否為類/接口/子類實例。Java 16+ 模式匹配:if (obj instanceof String s) { s.length(); } 直接賦值變量。

數值類型自動提升規則(二元運算)

按從寬到窄順序,雙操作數統一提升至較寬類型:

double > float > long > int > short/char/byte
// 具體:
// 任一為 double → 另一提升為 double
// 否則任一為 float → 另一提升為 float
// 否則任一為 long → 另一提升為 long
// 否則任一為 int → 另一提升為 int
// 否則 short/char/byte 參與運算先提升為 int

結果類型 = 提升後類型。如 byte + byte → int,需強轉回 byte。

強制類型轉換(造型)

double d = 9.99;
int i = (int) d; // 截斷小數部分 → 9
long l = (long) d; // 9

// 四捨五入
int rounded = (int) Math.round(d); // 10

窄化轉換可能丟失精度、溢出、符號改變,編譯器強制要求造型確認風險。

賦值上下文的隱式擴寬轉換

無需造型的安全賦值鏈:

byte → short → int → long → float → double
char → int
// 例:
byte b = 10;
int i = b; // 合法
byte b2 = i; // 錯誤,需 (byte) i

final 常量賦值給較窄類型若在範圍內編譯器允許(常量折疊):byte b = 100; // ok。

避坑指南

  • a += b 隱含造型:byte a=1; a+=2; // 合法,等價 a=(byte)(a+2)。
  • 浮點數比較避免 ==,用 Math.abs(a-b) < EPSILON。
  • 大數運算用 BigInteger、BigDecimal(金融必須)。
  • 移位操作僅保留低 5 位(int)或低 6 位(long)移位量:1 << 32 == 1。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved