NOTE
4.2 switch
1. 支持的功能 对byte、short、int、char、String、enum支持条件分支 2. 源码分析 2.1. int 编译之后使用idea查看class文件发现没有变化,说明int是直接比较整数值 2.2. char - 反编译之后 比较的是char的ascii码 2.3. String
这是历史学习笔记,可能存在过时或不完整的理解。
1. 支持的功能
对byte、short、int、char、String、enum支持条件分支
2. 源码分析
2.1. int
int a = 5;
switch (a)
{
case 1:
System.out.println(1);
break;
case 5:
System.out.println(5);
break;
default:
break;
}
编译之后使用idea查看class文件发现没有变化,说明int是直接比较整数值
2.2. char
char a = 'b';
switch (a)
{
case 'a':
System.out.println('a');
break;
case 'b':
System.out.println('b');
break;
default:
break;
}
- 反编译之后
char a = 98;
switch(a) {
case 97:
System.out.println('a');
break;
case 98:
System.out.println('b');
}
比较的是char的ascii码
2.3. String
String str = "world";
switch (str)
{
case "hello":
System.out.println("hello");
break;
case "world":
System.out.println("world");
break;
default:
break;
}
- 反编译之后
String str = "world";
byte var3 = -1;
switch(str.hashCode()) {
case 99162322:
if (str.equals("hello")) {
var3 = 0;
}
break;
case 113318802:
if (str.equals("world")) {
var3 = 1;
}
}
switch(var3) {
case 0:
System.out.println("hello");
break;
case 1:
System.out.println("world");
}
首先比较String的hashCode,然后再使用equals方法比较是否相等