直面底层之字节码看enum和switch,刚从阿里、头条面试回来

本文通过字节码分析枚举的实现方式,探讨Java中enum与switch的性能表现,结合实例展示了enum的字节码生成过程,适合面试复习和技术进阶。
摘要由CSDN通过智能技术生成
前言

本文从枚举的字节码方面看枚举,并学习下 swtich的实现 和 swtich(String) 的实现。


一、一个简单的枚举

public class EnumTest {
enum EnumDay {
MONDAY,
TUESDAY,
WENSDAY
}

public static void testEnum(EnumDay day){
switch (day){
case MONDAY:
break;
case TUESDAY:
break;
case WENSDAY:
break;
default:
break;
}
}
}

我们定义了一个枚举类EnumDay, 定义了三个值 MONDAY,TUESDAY,WENSDAY

接下来我们通过 javac EnumTest 看下编译后生成了 EnumTest.class EnumTest1.classEnumTest1.class EnumTest1.classEnumTestEnumDay.class 三个class 文件。

我们看下 EnumTest 的字节码文件(javap -c EnumTest)

{

public javaplan.EnumTest(); // 无参的构造方法
descriptor: ()V // 构造方法描述符,入参没有,返回值是 V 代表void
flags: ACC_PUBLIC // 方法访问标记 public

//操作数栈深度 1 局部变量表大小 1 参数个数 1 这里指this
Code:
stack=1, locals=1, args_size=1
0: aload_0 //将局部变量表第0 个位置加载到操作数栈顶,即 this
1: invokespecial #1 // Method java/lang/Object.“”😦)V //用this 执行init 方法
4: return
LineNumberTable:
line 3: 0

//TestEnum 方法实现
public static void testEnum(javaplan.EnumTest E n u m D a y ) ; d e s c r i p t o r : ( L j a v a p l a n / E n u m T

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值