基本类型与引用类型的差异决定重构策略:值语义用==、拷贝赋值、无null风险;引用语义需重写equals/hashCode、注意地址共享、警惕null和类型转换语义。

基本类型和引用类型的差异直接影响重构方式——不是所有重构都适用两者,关键看值语义还是引用语义。
区分 == 和 equals 的使用场景
重构时若涉及相等性判断,必须明确类型归属:基本类型用 == 安全可靠;引用类型(如 String、自定义类)默认 == 比较地址,需重写 equals() 并配合 hashCode() 才能按内容比较。
- 发现
obj1 == obj2用于两个非基本类型变量?大概率是逻辑错误,应改为obj1.equals(obj2) - 重构前检查类是否已重写
equals()和hashCode();没重写就直接调用,结果不可靠 - VS Code 或 IntelliJ 中可一键生成
equals()/hashCode(),避免手写遗漏字段
提取常量或字段时注意类型生命周期
基本类型赋值是拷贝,引用类型赋值是地址传递——这决定重构后变量是否共享状态。
- 提取为 常量(如
final int MAX_RETRY = 3;):适合基本类型或不可变引用类型(如String、Integer) - 提取为 字段(如
private List<string> items;</string>):若后续多处修改该集合,需确认是否期望所有调用方看到同一份数据 - 若本意是隔离修改,应提取为 局部变量 并在方法内新建实例(如
new ArrayList()),避免隐式共享
重构方法参数时警惕装箱与空指针
基本类型参数无 null 风险,但包装类(Integer、Boolean)作为引用类型可能为 null,重构时容易引入 NPE。
- 将方法参数从
int改为Integer?需同步增加 null 检查,或用重构工具自动插入Objects.requireNonNull() - Visual Studio 或 VS Code 的 “为所有参数添加 null 检查” 功能可批量处理这类风险
- 反向操作(
Integer→int)要确认调用方传入的绝非 null,否则运行时报NullPointerException
类型转换重构需匹配语义
基本类型与包装类之间、字符串与数值之间的转换,不能只看编译通过,更要验证业务含义是否一致。
-
String.valueOf(num)和Integer.toString(num)行为相同,但前者更通用;重构时统一风格即可 - 将
Double.parseDouble(str)替换为Double.valueOf(str)?后者返回对象,前者返回基本类型——若后续用于算术运算,前者更高效 - VS Code 中光标停在字符串字面量上,按
Ctrl+.可触发“转换为数值类型”建议,但需人工确认精度与异常处理策略

















