最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java Switch對各類型支持實現(xiàn)原理

 更新時間:2020年05月01日 10:29:19   作者:Hello_xzy_World  
這篇文章主要介紹了Java Switch對各類型支持實現(xiàn)原理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

switch

Java7開始,switch的參數(shù)可以是String類型了,這真的是一個很有用的改進,畢竟string還是挺常用的。到目前為止,switch支持的參數(shù)類型有:byte、short、int、char、String、enum。switch對各種類型參數(shù)的支持到底是怎么實現(xiàn)的呢?

byte、short、int

public class Main2 {
  public static void main(String[] args) {
    byte b = 1;
    switch (b) {
      case 0:
        System.out.println("0");
        break;
      case 1:
        System.out.println("1");
        break;
      default:
        System.out.println("other");
    }
  }
}

反編譯:

public class Main2 {
  public Main2() {
  }
  public static void main(String[] args) {
    byte b = 1;
    switch(b) {
      case 0:
        System.out.println("0");
        break;
      case 1:
        System.out.println("1");
        break;
      default:
        System.out.println("other");
    }
  }
}

將byte換成short、int,編譯后的結果與上面展示的基本相同。

char

public class Main2 {
  public static void main(String[] args) {
    char c = '0';
    switch (c) {
      case '0':
        System.out.println("0");
        break;
      case '1':
        System.out.println("1");
        break;
      default:
        System.out.println("other");
    }
  }
}

反編譯:

public class Main2 {
  public Main2() {
  }
  public static void main(String[] args) {
    char c = 48;
    switch(c) {
      case 48:
        System.out.println("0");
        break;
      case 49:
        System.out.println("1");
        break;
      default:
        System.out.println("other");
    }
  }
}

從反編譯的結果看,對char類型進行比較的時候,實際比較的是字符對應的ASCⅡ碼,編譯器把switch中char類型的變量轉換成int類型的變量。

String

public class Main2 {
  public static void main(String[] args) {
    String s = "0";
    switch (s) {
      case "0":
        System.out.println("0");
        break;
      case "1":
        System.out.println("1");
        break;
      default:
        System.out.println("other");
    }
  }
}

反編譯:

public class Main2 {
  public Main2() {
  }

  public static void main(String[] args) {
    String s = "0";
    byte var3 = -1;
    switch(s.hashCode()) {
      case 48:
        if (s.equals("0")) {
          var3 = 0;
        }
        break;
      case 49:
        if (s.equals("1")) {
          var3 = 1;
        }
    }

    switch(var3) {
      case 0:
        System.out.println("0");
        break;
      case 1:
        System.out.println("1");
        break;
      default:
        System.out.println("other");
     }
  }
}

從反編譯的結果看,switch借助hashCode()和equals()實現(xiàn)了對String的支持——先使用hashCode進行初步判斷,然后使用equal()進行二次校驗(由于哈希沖突的存在,這個二次校驗是必要的)。

public enum ColorEnum {
  RED, YELLOW, BLUE, GREED
}
public class Main {
  public static void main(String[] args) {
    ColorEnum color = ColorEnum.YELLOW;
    switch (color) {
      case RED:
        System.out.println("red");
        break;
      case YELLOW:
        System.out.println("yellow");
        break;
      default:
        System.out.println("other");
    }
  }
}

反編譯:

/*
 * Decompiled with CFR 0.149.
 */
package com.learn.java;

public final class ColorEnum
extends Enum<ColorEnum> {
  public static final /* enum */ ColorEnum RED = new ColorEnum("RED", 0);
  public static final /* enum */ ColorEnum YELLOW = new ColorEnum("YELLOW", 1);
  public static final /* enum */ ColorEnum BLUE = new ColorEnum("BLUE", 2);
  public static final /* enum */ ColorEnum GREED = new ColorEnum("GREED", 3);
  private static final /* synthetic */ ColorEnum[] $VALUES;

  public static ColorEnum[] values() {
    return (ColorEnum[])$VALUES.clone();
  }

  public static ColorEnum valueOf(String string) {
    return Enum.valueOf(ColorEnum.class, string);
  }

  private ColorEnum(String string, int n) {
    super(string, n);
  }

  static {
    $VALUES = new ColorEnum[]{RED, YELLOW, BLUE, GREED};
  }
}
/*
 * Decompiled with CFR 0.149.
 */
package com.learn.java;

import com.learn.java.ColorEnum;

public class Main {
  public static void main(String[] arrstring) {
    ColorEnum colorEnum = ColorEnum.YELLOW;
    switch (1.$SwitchMap$com$learn$java$ColorEnum[colorEnum.ordinal()]) {
      case 1: {
        System.out.println("red");
        break;
      }
      case 2: {
        System.out.println("yellow");
        break;
      }
      default: {
        System.out.println("other");
      }
    }
  }
}

上面的反編譯結果表明,switch借助枚舉類的序號實現(xiàn)對枚舉類的支持。

總結

其實switch只支持整型,其他數(shù)據(jù)類型都是轉換成整型后才使用的switch。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • SpringBoot3集成Zookeeper的代碼詳解

    SpringBoot3集成Zookeeper的代碼詳解

    ZooKeeper是一個集中的服務,用于維護配置信息、命名、提供分布式同步、提供組服務,分布式應用程序以某種形式使用所有這些類型的服務,本文將給大家介紹SpringBoot3集成Zookeeper的代碼,文中通過代碼示例介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • Java的異常處理體系詳解

    Java的異常處理體系詳解

    這篇文章主要介紹了Java的異常處理體系,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 淺談Spring Security LDAP簡介

    淺談Spring Security LDAP簡介

    這篇文章主要介紹了淺談Spring Security LDAP簡介,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-05-05
  • springboot中請求路徑配置在配置文件中詳解

    springboot中請求路徑配置在配置文件中詳解

    這篇文章主要介紹了springboot中請求路徑配置在配置文件中,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • java jdbc連接和使用詳細介紹

    java jdbc連接和使用詳細介紹

    這篇文章主要介紹了 java jdbc連接和使用詳細介紹的相關資料,需要的朋友可以參考下
    2016-12-12
  • 排查Java應用內存泄漏問題的步驟

    排查Java應用內存泄漏問題的步驟

    這篇文章主要介紹了排查Java應用內存泄漏問題的步驟,幫助大家更好的理解和學習Java,感興趣的朋友可以了解下
    2020-11-11
  • 面試突擊之跨域問題的解決方案詳解

    面試突擊之跨域問題的解決方案詳解

    跨域問題本質是瀏覽器的一種保護機制,它的初衷是為了保證用戶的安全,防止惡意網(wǎng)站竊取數(shù)據(jù)。那怎么解決這個問題呢?接下來我們一起來看
    2022-09-09
  • Java詳解HashMap實現(xiàn)原理和源碼分析

    Java詳解HashMap實現(xiàn)原理和源碼分析

    這篇文章主要介紹了Java關于HashMap的實現(xiàn)原理并進行源碼分析,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • 一文詳解Java17中LinkedList類的用法和應用場景

    一文詳解Java17中LinkedList類的用法和應用場景

    LinkedList 是 Java 集合框架中基于雙向鏈表實現(xiàn)的類,實現(xiàn)了 List 和 Deque 接口,本文將為大家介紹一下它在Java 17 中如何更高效的使用吧
    2025-03-03
  • Spring MVC實現(xiàn)的登錄攔截器代碼分享

    Spring MVC實現(xiàn)的登錄攔截器代碼分享

    這篇文章主要介紹了Spring MVC實現(xiàn)的登錄攔截器代碼分享,涉及攔截器的簡單介紹,攔截器和過濾器的區(qū)以及攔截器實現(xiàn)代碼等相關內容,這里分享給大家,供需要的朋友參考。
    2017-10-10

最新評論

黔江区| 凌海市| 梅河口市| 中超| 台中县| 和龙市| 兰西县| 高雄市| 九台市| 南投县| 丘北县| 大新县| 靖安县| 雷州市| 太康县| 通辽市| 江口县| 新邵县| 武强县| 洛宁县| 武乡县| 岢岚县| 通辽市| 应城市| 张家口市| 本溪| 林周县| 剑阁县| 临沭县| 安丘市| 阿拉善盟| 万盛区| 岳池县| 丰台区| 余庆县| 大名县| 抚松县| 金乡县| 拉孜县| 嫩江县| 闽侯县|