当前位置: 代码迷 >> 综合 >> String在编译时的优化及switch中对String的支持
  详细解决方案

String在编译时的优化及switch中对String的支持

热度:11   发布时间:2024-02-21 19:12:57.0

前提:jdk版本为1.8.0_73

java代码:

public class test {public static void main(String[] args) throws Exception {String str = "a" + "b";for (int i = 0; i < 10; i++) {str = str.concat(i + "");}System.out.println(str);String a = "aszx";switch (a) {case "as":System.out.println(a);break;case "aszx":System.out.println(a);break;default:System.out.println("default:" + a);}}
}

字节码文件:

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//public class test {public test() {}public static void main(String[] var0) throws Exception {String var1 = "ab";for(int var2 = 0; var2 < 10; ++var2) {var1 = var1.concat(var2 + "");}System.out.println(var1);String var5 = "aszx";byte var4 = -1;switch(var5.hashCode()) {case 3122:if (var5.equals("as")) {var4 = 0;}break;case 3004144:if (var5.equals("aszx")) {var4 = 1;}break;}switch(var4) {case 0:System.out.println(var5);break;case 1:System.out.println(var5);break;default:System.out.println("default:" + var5);}}
}

 

可以看出:

1.对于String类型变量,在定义时,用"+"连接,编译后会优化成一个常量

2.switch对String的支持,是通过String变量的hashCode码+equals()方法,将String变量映射到一个数字型变量(byte、short、int等,经实测,该变量类型与case分支数量有关),再使用switch选择

  相关解决方案