2.3java運算符

運算符

1. 算術運算符

算術運算符用于執行基本的數學運算,像加、減、乘、除等。

運算符描述示例
+加法int a = 5 + 3; // a 的值為 8
-減法int b = 5 - 3; // b 的值為 2
*乘法int c = 5 * 3; // c 的值為 15
/除法int d = 6 / 3; // d 的值為 2
%取模(取余)int e = 7 % 3; // e 的值為 1
++自增int f = 5; f++; // f 的值為 6
--自減int g = 5; g--; // g 的值為 4

2. 賦值運算符

賦值運算符用于給變量賦值。

運算符描述示例
=簡單賦值int a = 5; // a 的值為 5
+=加后賦值int b = 5; b += 3; // b 的值為 8
-=減后賦值int c = 5; c -= 3; // c 的值為 2
*=乘后賦值int d = 5; d *= 3; // d 的值為 15
/=除后賦值int e = 6; e /= 3; // e 的值為 2
%=取模后賦值int f = 7; f %= 3; // f 的值為 1

3. 比較運算符

比較運算符用于比較兩個值,返回布爾類型(true?或?false)。

運算符描述示例
==等于int a = 5; int b = 5; boolean c = (a == b); // c 的值為 true
!=不等于int d = 5; int e = 3; boolean f = (d != e); // f 的值為 true
>大于int g = 5; int h = 3; boolean i = (g > h); // i 的值為 true
<小于int j = 5; int k = 7; boolean l = (j < k); // l 的值為 true
>=大于等于int m = 5; int n = 5; boolean o = (m >= n); // o 的值為 true
<=小于等于int p = 5; int q = 7; boolean r = (p <= q); // r 的值為 true

4. 邏輯運算符

邏輯運算符用于組合布爾表達式。

運算符描述示例
&&邏輯與boolean a = true; boolean b = false; boolean c = (a && b); // c 的值為 false
||邏輯或boolean d = true; boolean e = false; boolean f = (d||e); //f 的值為 true`
!邏輯非boolean g = true; boolean h = !g; // h 的值為 false

5. 位運算符

位運算符用于對二進制位進行操作。

運算符描述示例
&按位與int a = 5; int b = 3; int c = a & b; // c 的值為 1
|按位或int d = 5; int e = 3; int f = d | e; // f 的值為 7
^按位異或int g = 5; int h = 3; int i = g ^ h; // i 的值為 6
~按位取反int j = 5; int k = ~j; // k 的值為 -6
<<左移int l = 5; int m = l << 1; // m 的值為 10
>>右移int n = 5; int o = n >> 1; // o 的值為 2
>>>無符號右移int p = -5; int q = p >>> 1; // q 的值為一個很大的正數

6. 三元運算符

三元運算符是一種簡潔的條件判斷語句。

條件表達式 ? 表達式1 : 表達式2;
int a = 5;
int b = 3;
int max = (a > b) ? a : b; // max 的值為 5

運算符優先級

運算符優先級決定了表達式中運算符的計算順序。優先級高的運算符先計算,相同優先級的運算符按照從左到右的順序計算。以下是 Java 運算符的優先級,從高到低排列:

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

在編寫表達式時,可以使用括號?()?來明確指定計算順序,提高代碼的可讀性。例如:

int result = (2 + 3) * 4; // 先計算括號內的加法,再計算乘法

+?運算符除了用于數值的加法運算外,還能用于字符串的連接操作

字符串連接基本規則

當?+?運算符的操作數中有一個是字符串類型時,Java 會將其他操作數轉換為字符串,然后進行連接操作。具體規則如下:

1. 字符串與基本數據類型連接

當字符串與基本數據類型(如?intdoubleboolean?等)使用?+?運算符時,基本數據類型會自動轉換為字符串,然后與另一個字符串進行連接。

public class StringConcatenation {public static void main(String[] args) {// 字符串與 int 類型連接int num = 10;String str1 = "The number is: " + num;System.out.println(str1);// 字符串與 double 類型連接double d = 3.14;String str2 = "The value of pi is approximately: " + d;System.out.println(str2);// 字符串與 boolean 類型連接boolean isTrue = true;String str3 = "The condition is: " + isTrue;System.out.println(str3);}
}

在上述代碼中,numd?和?isTrue?分別是?intdouble?和?boolean?類型,當它們與字符串使用?+?運算符時,會自動轉換為字符串進行連接。

多個字符串與其他類型混合連接

+?運算符是從左到右依次進行計算的,當多個字符串和其他類型混合使用?+?運算符時,會按照順序依次進行連接。

public class MultipleStringConcatenation {public static void main(String[] args) {int a = 5;int b = 3;String result = "The sum of " + a + " and " + b + " is: " + (a + b);System.out.println(result);}
}

在上述代碼中,首先將?"The sum of "?與?a?轉換后的字符串連接,然后依次連接后續的字符串和變量。需要注意的是,(a + b)?用括號括起來是為了先進行數值加法運算,再將結果轉換為字符串進行連接。如果沒有括號,a?會先與前面的字符串連接,而不是先進行加法運算。

字符串連接中的類型轉換順序

當表達式中包含多個?+?運算符時,會按照從左到右的順序進行計算。一旦遇到字符串類型的操作數,后續的操作數都會被轉換為字符串進行連接。

public class ConversionOrder {public static void main(String[] args) {int x = 1;int y = 2;String s = "Result: ";System.out.println(s + x + y);  // 先將 s 與 x 轉換后的字符串連接,再與 y 轉換后的字符串連接System.out.println(x + y + s);  // 先進行 x + y 的數值加法運算,再將結果與 s 連接}
}

在上述代碼中,第一個?println?語句先將?s?與?x?轉換后的字符串連接,再與?y?轉換后的字符串連接,結果為?"Result: 12";第二個?println?語句先進行?x + y?的數值加法運算,得到?3,再將?3?轉換為字符串與?s?連接,結果為?"3Result: "

綜上所述,+?運算符在 Java 中用于字符串連接時,會根據操作數的類型自動進行類型轉換,按照從左到右的順序依次進行連接操作。在編寫代碼時,需要注意運算符的優先級和類型轉換順序,以確保得到預期的結果。

自動類型轉換

自動類型轉換,也稱為隱式類型轉換,是指在某些情況下,Java 編譯器會自動將一種數據類型轉換為另一種數據類型,而無需程序員進行額外的操作。自動類型轉換需要滿足以下兩個條件:

  1. 目標類型的范圍大于源類型的范圍:即目標類型能夠容納源類型的所有可能值。
  2. 數據類型兼容:兩種數據類型必須是兼容的,例如數值類型之間可以進行自動類型轉換。

以下是 常見的自動類型轉換示例:

public class AutomaticTypeConversion {public static void main(String[] args) {// 1. 從 byte 到 shortbyte byteValue = 10;short shortValue = byteValue;System.out.println("byte 轉換為 short: " + shortValue);// 2. 從 short 到 intshort anotherShortValue = 20;int intValue = anotherShortValue;System.out.println("short 轉換為 int: " + intValue);// 3. 從 int 到 longint anotherIntValue = 30;long longValue = anotherIntValue;System.out.println("int 轉換為 long: " + longValue);// 4. 從 int 到 floatint yetAnotherIntValue = 40;float floatValue = yetAnotherIntValue;System.out.println("int 轉換為 float: " + floatValue);// 5. 從 long 到 doublelong anotherLongValue = 50L;double doubleValue = anotherLongValue;System.out.println("long 轉換為 double: " + doubleValue);}
}

在上述代碼中,分別展示了從?byte?到?shortshort?到?intint?到?longint?到?float?以及?long?到?double?的自動類型轉換。由于目標類型的范圍大于源類型的范圍,編譯器會自動進行轉換。

強制類型轉換

強制類型轉換,也稱為顯式類型轉換,是指當需要將一個范圍大的數據類型轉換為范圍小的數據類型時,程序員需要手動進行類型轉換。強制類型轉換可能會導致數據丟失,因為目標類型可能無法容納源類型的所有可能值。

目標類型 變量名 = (目標類型) 源類型變量;
public class ExplicitTypeConversion {public static void main(String[] args) {// 1. 從 double 到 intdouble doubleValue = 3.14;int intValue = (int) doubleValue;System.out.println("double 轉換為 int: " + intValue);// 2. 從 int 到 byteint intValue2 = 130;byte byteValue = (byte) intValue2;System.out.println("int 轉換為 byte: " + byteValue);// 3. 從 long 到 shortlong longValue = 32768L;short shortValue = (short) longValue;System.out.println("long 轉換為 short: " + shortValue);}
}

在上述代碼中,分別展示了從?double?到?intint?到?byte?以及?long?到?short?的強制類型轉換。需要注意的是,強制類型轉換可能會導致數據丟失,例如?double?類型的小數部分會被截斷,int?或?long?類型的值可能會超出目標類型的范圍而導致溢出。

綜上所述,自動類型轉換是編譯器自動完成的,而強制類型轉換需要程序員手動進行。在進行強制類型轉換時,需要謹慎處理,避免數據丟失。

小于?int?類型的數據類型(如?byteshort?和?char)在進行運算時,通常都會自動轉換為?int?類型。

原因

  • 保證運算精度byteshort?和?char?的取值范圍相對較小,在運算過程中結果可能會超出它們的表示范圍,轉換為?int?類型可以避免溢出問題,確保運算結果的準確性。
  • 簡化指令集:Java 虛擬機(JVM)的指令集是為處理?int?類型設計的。將小于?int?的數據類型轉換為?int?類型,可以統一處理整數運算,簡化 JVM 的指令集和運算規則,提高運算效率。

示例代碼

public class SmallerThanIntConversion {public static void main(String[] args) {// byte 類型運算byte byte1 = 10;byte byte2 = 20;// byte1 和 byte2 會自動轉換為 int 類型進行運算int byteResult = byte1 + byte2;System.out.println("byte 運算結果: " + byteResult);// short 類型運算short short1 = 30;short short2 = 40;// short1 和 short2 會自動轉換為 int 類型進行運算int shortResult = short1 + short2;System.out.println("short 運算結果: " + shortResult);// char 類型運算char char1 = 'A';char char2 = 'B';// char1 和 char2 會自動轉換為 int 類型進行運算int charResult = char1 + char2;System.out.println("char 運算結果: " + charResult);}
}

代碼解釋

  • byte?類型運算byte1?和?byte2?是?byte?類型,但在執行?byte1 + byte2?運算時,它們會自動轉換為?int?類型,最終結果也是?int?類型。
  • short?類型運算short1?和?short2?是?short?類型,在運算時同樣會自動轉換為?int?類型,結果為?int?類型。
  • char?類型運算char?類型在 Java 中本質上是無符號的 16 位整數。char1?和?char2?在運算時會自動轉換為?int?類型,結果也是?int?類型。

如果要將運算結果賦值給小于?int?類型的變量,需要進行強制類型轉換,但要注意可能會出現數據溢出的問題。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/78346.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/78346.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/78346.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

升級 Spring Boot CLI

&#x1f31f; 升級 Spring Boot CLI 1?? &#x1f504; 通過包管理器升級 使用對應包管理器命令&#xff08;如 brew upgrade&#xff09; 2?? &#x1f4e5; 手動安裝升級 遵循 標準安裝說明 注意更新 PATH 環境變量移除舊版本路徑 &#x1f517; 鏈接原文&#xff1a…

如何輕松將RS232轉為Profibus DP,提升PLC效率?

如何輕松將RS232轉為Profibus DP&#xff0c;提升PLC效率&#xff1f; 今天&#xff0c;我們就來聊聊一個工業自動化中常見的應用場景&#xff1a;如何通過興達易控RS232轉Profibus DP網關&#xff0c;實現流量泵與PLC&#xff08;可編程邏輯控制器&#xff09;的通信。這個話…

QT 連接數據庫操作(15)

文章目錄 一、本章說明二、QT連接云端數據庫實現2.1 ODBC軟件安裝及參數設置2.2 軟件代碼實現三、項目源碼文件一、本章說明 注:本節為【基于STM的環境監測系統(節點+云服務器存儲+QT界面設計)】項目第15篇文章,前面已經創建了監測軟件的登錄窗口,接下來我們將在主窗口實…

linux系統之----命令行參數和環境變量

一、命令行參數 1.main()函數的參數 在C語言中&#xff0c;main函數可以接收命令行參數&#xff0c;其標準形式為&#xff1a; int main(int argc, char *argv[]) {// 程序代碼return 0; } 這里我們解釋一下&#xff1a; argc&#xff1a;參數個數計數器&#xff08;Argum…

解析excel中的圖片

解析excel中的圖片 前言一、pom依賴二、使用步驟1.示例數據2.代碼如下&#xff08;示例&#xff09;&#xff1a; 總結 前言 初始化數據是&#xff0c;需要將excel中的數據解析并插入數據庫。 但是某幾列存放的是圖片&#xff0c;這時候怎么辦呢。 主要解決的是&#xff1a;獲…

Unity任務系統筆記

數據結構設計 任務基類包括的字段&#xff1a; string 任務內容&#xff1b; Transform 任務目的地&#xff1b; MyCharacter 任務開啟后要更新對話的NPC&#xff1b; MyTalkData 任務開啟后相關NPC要說的對話數據&#xff1b; 共同方法&#xff1a;開啟任務、完成任務。…

STM32的開發環境介紹

目錄 STM32軟件環境 Keil軟件在線安裝 其他軟件環境安裝 STM32開發的幾種方式 STM32寄存器版本和庫函數版本 標準外設庫的作用&#xff1a; STM32軟件環境 STM32 的集成開發環境&#xff08;IDE&#xff09;&#xff1a;編輯編譯軟件 常見的環境&#xff1a; (1)KEIL&a…

【特殊場景應對9】視頻簡歷的適用場景與風險分析

寫在最前 作為一個中古程序猿,我有很多自己想做的事情,比如埋頭苦干手搓一個低代碼數據庫設計平臺(目前只針對寫java的朋友),比如很喜歡幫身邊的朋友看看簡歷,講講面試技巧,畢竟工作這么多年,也做到過高管,有很多面人經歷,意見還算有用,大家基本都能拿到想要的offe…

Linux系統性能調優技巧分享

在數字化時代,Linux 系統以其開源、穩定、高效的特性,成為服務器、云計算、物聯網等領域的核心支撐。然而,隨著業務規模的擴大和負載的增加,系統性能問題逐漸凸顯。掌握 Linux 系統性能調優技巧,不僅能提升系統運行效率,還能降低運維成本。下面從多個方面介紹實用的性能調…

關于Code_流蘇:商務合作、產品開發、計算機科普、自媒體運營,一起見證科技與藝術的交融!

Code_流蘇 &#x1f33f; 名人說&#xff1a;路漫漫其修遠兮&#xff0c;吾將上下而求索。—— 屈原《離騷》 創作者&#xff1a;Code_流蘇(CSDN)&#xff08;一個喜歡古詩詞和編程的Coder&#x1f60a;&#xff09; &#x1f31f; 歡迎來到Code_流蘇的CSDN主頁 —— 與我一起&…

系統架構設計(三):質量屬性

常見分類 一般來說&#xff0c;質量屬性可以分為以下幾類&#xff1a; 類別常見質量屬性性能相關響應時間、吞吐量、資源利用率、實時性、可擴展性可用性相關可用性、高可用性&#xff08;HA&#xff09;、可靠性、容錯性、恢復性可維護性相關可維護性、可測試性、可擴展性、…

【鋰電池剩余壽命預測】GRU門控循環單元鋰電池剩余壽命預測(Matlab完整源碼)

目錄 效果一覽程序獲取程序內容代碼分享研究內容GRU門控循環單元在鋰電池剩余壽命預測中的應用摘要關鍵詞1. 引言1.1 研究背景1.2 研究現狀與問題1.3 研究目的與意義2. 文獻綜述2.1 鋰電池剩余壽命預測傳統方法2.2 深度學習在鋰電池壽命預測中的應用2.3 研究空白與本文切入點3.…

SpringCloud原理和機制

Spring Cloud 是一套基于Spring Boot的微服務開發工具集&#xff0c;它提供了在分布式系統環境下構建應用程序所需的一系列工具和服務。Spring Cloud旨在幫助開發人員快速構建一些常見的微服務模式&#xff0c;如服務發現、配置管理、智能路由、熔斷器、微代理、控制總線等。 …

LeetCode -- Flora -- edit 2025-04-25

1.盛最多水的容器 11. 盛最多水的容器 已解答 中等 相關標簽 相關企業 提示 給定一個長度為 n 的整數數組 height 。有 n 條垂線&#xff0c;第 i 條線的兩個端點是 (i, 0) 和 (i, height[i]) 。 找出其中的兩條線&#xff0c;使得它們與 x 軸共同構成的容器可以容納最…

有關圖的類型的題目以及知識點(2)

1、具有5個頂點的有向完全圖有20條弧。 2、若一個有向圖用鄰接矩陣表示&#xff0c;則第個結點的入度就是&#xff1a;第i列的非零元素的個數。 3、有向圖的鄰接矩陣可以是對稱的&#xff0c;也可以是不對稱的。 4、設N個頂點E條邊的圖用鄰接表存儲&#xff0c;則求每個頂點…

正則表達式的捕獲組

是正則表達式中的一個重要概念&#xff0c;用于提取字符串中的特定部分 捕獲組是通過正則表達式中的圓括號 () 定義的&#xff0c;它的作用是&#xff1a; 劃分和標記&#xff1a;將正則表達式的一部分劃分為邏輯單元。 提取數據&#xff1a;從字符串中提取符合組內模式的內容…

deepseek-cli開源的強大命令行界面,用于與 DeepSeek 的 AI 模型進行交互

一、軟件介紹 文末提供程序和源碼下載 deepseek-cli一個強大的命令行界面&#xff0c;用于與 DeepSeek 的 AI 模型進行交互。 二、Features 特征 Multiple Model Support 多模型支持 DeepSeek-V3 (deepseek-chat) DeepSeek-R1 &#xff08;deepseek-reasoner&#xff09;Dee…

Java—— 五道算法水題

第一題 需求&#xff1a; 包裝類&#xff1a;鍵盤錄入一些1~100之間的整數&#xff0c;并添加到集合中。直到集合中所有數據和超過200為止 代碼實現&#xff1a; import java.util.ArrayList; import java.util.Scanner;public class Test1 {public static void main(String[]…

安全編排自動化與響應(SOAR):從事件響應到智能編排的技術實踐

安全編排自動化與響應&#xff08;SOAR&#xff09;&#xff1a;從事件響應到智能編排的技術實踐 在網絡安全威脅復雜度指數級增長的今天&#xff0c;人工處理安全事件的效率已難以應對高頻攻擊&#xff08;如日均萬級的惡意IP掃描&#xff09;。安全編排自動化與響應&#xf…

網絡原理 - 9

目錄 數據鏈路層 以太網 以太網幀格式 MAC 地址 DNS&#xff08;Domain Name System&#xff09; 完&#xff01; 數據鏈路層 這里的內容也是簡單了解&#xff0c;除非是做交換機開發&#xff0c;一般程序員不需要涉及~~ 以太網 ”以太網“不是一種具體的網絡&#xf…