成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java 中 switch 語句支持字符串類型的歷史和原理

開發 前端
為了讓 switch? 語句更高效,編譯器還會做一些優化。比如,如果 case? 標簽不多,編譯器可能會直接用一系列的 if-else? 語句來代替 switch? 語句。

想象一下這個場景:你正在寫一個水果識別的程序,用戶輸入「蘋果」就要執行特定邏輯。在 Java 7 之前,你只能這樣寫:

if (fruit.equals("蘋果")) {
    // 處理蘋果
} else if (fruit.equals("香蕉")) {
    // 處理香蕉
} else {
    //... 其他水果
}

這種寫法就像超市收銀員每次結賬都要拆開包裹檢查商品,而 Java 7 之后的字符串 switch 相當于給每個商品貼了快速識別條形碼-程序員寫代碼更優雅。

以前為什么不能用字符串?

早期的 Java(Java 7 以前)switch 只能處理數字類數據(比如 int、char),因為這些類型底層可以直接用數字比對,簡單快速。而字符串是復雜對象,直接逐個字符對比太費時間,所以那時候只能用 if-else 處理字符串分支。

字符串的“身份證”——哈希碼(Hash Code)

每個字符串都有個唯一的哈希碼(可以理解成根據內容用數學公式算出來的身份證號):

  • ? 比如 "蘋果" 的哈希碼是 12345,"香蕉" 的哈希碼是 67890
  • ? 關鍵特性:內容相同的字符串哈希碼一定相同,不同內容大概率不同(極小概率重復,叫“哈希碰撞”)

switch 字符串操作

1. 存身份證號編譯器會把所有 case 后的字符串(比如 "蘋果"、"香蕉")的哈希碼存進一個數組里。

2. 先比身份證號運行到 switch 時,先計算輸入字符串的哈希碼(比如用戶輸入 "蘋果",算出 12345),然后去數組里快速匹配。

3. 再驗真身(防冒牌貨)哈希碼匹配后,還要用 equals() 方法確認字符串內容是否真的相同(防止極小概率的哈希碰撞)。

從本質來講,switch 對字符串的支持,其實也是 int 類型值的匹配。

舉個栗子 ??

String fruit = "蘋果";
switch(fruit) {
    case "蘋果": 
        System.out.println("紅富士"); 
        break;
    case "香蕉": 
        System.out.println("芝麻蕉"); 
        break;
    default: 
        System.out.println("不認識");
}

在這個例子中,編譯器會先計算 "蘋果" 和 "香蕉" 的哈希碼,然后在運行時計算 fruit 的哈希碼。如果 fruit 的哈希碼和 "蘋果" 的哈希碼匹配,它會再用 equals 方法確認 fruit 是否真的是 "蘋果"。如果是,就輸出 "紅富士"。

編譯器的優化

為了讓 switch 語句更高效,編譯器還會做一些優化。比如,如果 case 標簽不多,編譯器可能會直接用一系列的 if-else 語句來代替 switch 語句。這樣做可以減少 hashCode 計算和 equals 方法調用的次數,從而提高性能。

性能考慮

雖然字符串類型的 switch 語句很方便,但它畢竟需要計算哈希碼 hashCode 和調用 equals 方法,所以在性能要求非常高的場合,可能不如用整數類型或枚舉類型來得快。比如,在一些對速度要求極高的游戲中,開發者可能會選擇用整數或枚舉類型來避免額外的性能開銷。switch 語句讓編程變得更加靈活,但也需要注意它的性能特點,合理選擇適用的場景。

責任編輯:武曉燕 來源: 沐雨花飛碟
相關推薦

2021-03-08 08:23:24

Java字符串截取

2024-07-03 08:24:58

2009-09-04 10:26:09

Java和C#字符串類

2009-06-08 21:45:46

Javaswitch-case

2010-09-13 15:12:26

sql server字

2011-06-08 15:45:41

字符串JAVA

2009-11-30 14:08:42

PHP字符串原理

2010-03-09 15:15:02

Python字符串類型

2019-12-17 15:49:44

Java語言字符串

2010-11-26 13:18:53

MySQL字符串

2010-11-26 10:58:30

MySQL字符串

2010-06-28 15:18:51

SQL Server

2022-12-27 08:13:40

JAVA字符串常量池

2023-10-26 12:01:30

Golang字符串

2021-07-30 06:22:37

C++字符型字符串

2023-12-18 09:26:12

C++switchif

2020-10-09 06:48:19

Pythonswitch語句

2010-10-09 11:43:10

MYSQL字符串

2009-09-07 14:33:02

C# switch語句

2009-02-24 15:39:27

字符串比較函數函數
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩免费网站 | 在线观看成年人视频 | 国产精品成人一区二区 | 中文字幕亚洲视频 | 国产成人综合亚洲欧美94在线 | 四虎成人精品永久免费av九九 | 久久久国产一区二区三区四区小说 | 日本精品一区二区三区在线观看视频 | 蜜桃黄网 | 亚洲一区二区三区在线免费观看 | 一区二区欧美在线 | 久久久久久久久久毛片 | 在线免费观看a级片 | 成年免费大片黄在线观看岛国 | 欧美激情欧美激情在线五月 | 国产乱码精品一区二区三区忘忧草 | 免费视频成人国产精品网站 | 久久综合激情 | 在线不卡视频 | 在线播放亚洲 | 伦理片97| 久久综合一区二区三区 | 亚洲国产精品久久久久秋霞不卡 | 精品av天堂毛片久久久借种 | a久久 | 国产日韩精品视频 | 激情av在线 | 三级黄色网址 | 日韩中文不卡 | 超碰操 | 成人在线看片 | 97久久精品 | 国产成人99久久亚洲综合精品 | 日本天堂视频在线观看 | 亚洲精品一区中文字幕 | 97色在线观看免费视频 | 麻豆精品一区二区三区在线观看 | 国产精品久久二区 | 久久亚洲天堂 | 久久久久se | 亚洲欧美男人天堂 |