说几个常见的语法糖?
面试回答¶
面试官: 说几个常见的语法糖,为什么叫语法糖?
你:
语法糖就是编译器帮你把简洁写法翻译成冗长但标准的底层代码,让你少写重复模板,不改变程序语义。下面几个最常用:
-
增强 for 循环(foreach) 你写
for (String s : list),编译后变成迭代器遍历。数组则变成普通 for 下标循环。好处是不用操心边界和迭代器,代码更干净。 -
自动装箱与拆箱
Integer i = 100其实是Integer.valueOf(100);int j = i实际调了i.intValue()。编译期自动插入转换,你写的像是基本类型直接赋给包装类,但背后都是方法调用。注意拆箱时可能空指针,是个隐藏坑。 -
变长参数
void foo(String... args)调用时可以传零到多个实参,编译后变成String[],实参被自动打包成数组传入。所以不能同时有两个变长参数,因为无法区分数组边界。 -
泛型
List<String>只在编译期生效,编译后擦除成原生List,并在必要位置插入强制类型转换。它把类型检查提前,省去手动强转。 -
try-with-resources 写了
try (InputStream is = new FileInputStream(f))就不用手动 finally 关闭,编译器自动补全close()逻辑并处理异常抑制,保证资源释放。 -
switch 支持字符串
switch(str)编译后会变为先计算hashCode,再用equals判断,本质还是匹配整数分支。
这些糖的共同套路就是用简单写法骗过你的眼睛,编译器在背后默默还原成基础语法。理解它们有助于看懂反编译代码,也避免使用时踩坑。
