java方法重载判定核心是方法名相同且参数列表不同;参数列表不同指参数个数、类型或顺序三者之一不同,返回值、修饰符等均不参与判定。

判断 Java 中方法是否构成重载,核心就看两点:方法名相同,且参数列表不同。而“参数列表不同”具体指参数个数不同、参数类型不同,或参数顺序不同——这三者满足其一即可。返回值、修饰符、异常声明、参数名,全都不参与判定。
参数个数不同是最直观的重载方式
只要方法名一样,传入的实参数量不一样,编译器就能明确区分。比如:
-
void print(String s) 和 void print(String s, int times) —— 后者多一个
int参数,构成重载; - 工具类中常见的
log(String)、log(String, Object)、log(String, Object, Object)就是靠个数差异提供多档调用入口。
参数类型不同是高频使用场景
相同位置上的参数类型不一致,就足以触发重载。注意:基本类型和包装类被视为不同类型,例如 int 和 Integer 可以共存重载:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- void process(int x) 和 void process(Integer x) —— 合法重载;
- void show(double d) 和 void show(String s) —— 类型完全不同,无歧义;
- 但要注意自动装箱/拆箱会影响实际调用选择:传
5(字面量)时,process(int)会优先于process(Integer)被选中。
参数顺序不同需谨慎使用
当参数个数和类型集合相同时,仅靠顺序变化也能构成重载,但前提是对应位置的类型必须可区分:
-
void build(String name, int id) 和 void build(int id, String name) —— 有效重载,因为第1位分别是
String和int; - 但 void build(int a, int b) 和 void build(int b, int a) —— 不构成重载,参数列表在编译器眼中完全一致(都是
(int, int)),直接报错 Duplicate method; - 这类写法容易降低可读性,建议只在语义明确、调用方不易混淆时采用。
哪些变化完全不影响重载判定
以下修改哪怕全部叠加,只要参数列表不变,就不算重载,反而会导致编译失败:
- 仅修改返回值类型,如
int getValue()和String getValue()→ 报错; - 仅改变访问修饰符,如
public void run()和private void run()→ 报错; - 仅增删
throws声明,或仅改参数名(如int x改成int num)→ 完全无效。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










