跳转至

说几个常见的语法糖?

面试回答

面试官: 说几个常见的语法糖,为什么叫语法糖?

你:

语法糖就是编译器帮你把简洁写法翻译成冗长但标准的底层代码,让你少写重复模板,不改变程序语义。下面几个最常用:


  1. 增强 for 循环(foreach) 你写 for (String s : list),编译后变成迭代器遍历。数组则变成普通 for 下标循环。好处是不用操心边界和迭代器,代码更干净。

  2. 自动装箱与拆箱 Integer i = 100 其实是 Integer.valueOf(100)int j = i 实际调了 i.intValue()。编译期自动插入转换,你写的像是基本类型直接赋给包装类,但背后都是方法调用。注意拆箱时可能空指针,是个隐藏坑。

  3. 变长参数 void foo(String... args) 调用时可以传零到多个实参,编译后变成 String[],实参被自动打包成数组传入。所以不能同时有两个变长参数,因为无法区分数组边界。

  4. 泛型 List<String> 只在编译期生效,编译后擦除成原生 List,并在必要位置插入强制类型转换。它把类型检查提前,省去手动强转。

  5. try-with-resources 写了 try (InputStream is = new FileInputStream(f)) 就不用手动 finally 关闭,编译器自动补全 close() 逻辑并处理异常抑制,保证资源释放。

  6. switch 支持字符串 switch(str) 编译后会变为先计算 hashCode,再用 equals 判断,本质还是匹配整数分支。


这些糖的共同套路就是用简单写法骗过你的眼睛,编译器在背后默默还原成基础语法。理解它们有助于看懂反编译代码,也避免使用时踩坑。

deepseek_mermaid_20260612_fec404.png