var
是Java 10引入的局部变量类型推断关键字,它允许开发者声明局部变量时不必显式指定类型,而是由编译器根据初始化的表达式自动推断类型。这一特性旨在减少样板代码,同时保持Java的静态类型安全性。
一、核心特性与基本用法
1.1 基本语法
var variableName = initializer;
- 只适用于局部变量(方法内或代码块内)
- 必须立即初始化(不能只声明不赋值)
- 不能用于null初始化(无法推断具体类型)
1.2 典型使用场景
场景 | 传统写法 | 使用var 的写法 |
---|---|---|
简单类型声明 | String name = "Alice"; |
var name = "Alice"; |
泛型集合 | List<String> list = new ArrayList<>(); |
var list = new ArrayList<String>(); |
复杂类型 | Map<String, List<Employee>> map = new HashMap<>(); |
var map = new HashMap<String, List<Employee>>(); |
带钻石操作符 | Iterator<Map.Entry<String, Integer>> it = map.entrySet().iterator(); |
var it = map.entrySet().iterator(); |
二、实现原理与类型安全
2.1 编译期类型推断
var
并非动态类型,而是编译时完全确定类型:
- 编译器分析初始化表达式
- 推断出最具体的类型
- 生成字节码时使用具体类型
等效性示例:
var list = new ArrayList<String>();
// 完全等价于:
ArrayList<String> list = new ArrayList<String>();
2.2 字节码验证
// 源代码