不能通过设置不同的返回值来实现方法重载,这样设置的方法不一定会编译通过,但Class文件中可以共存。
如下
1. 例证
IDEA工具,JDK8测试:

2. 原因
参考自《深入理解Java虚拟机》(第3版),如图

在Java语言中,要重载(Overload)一个方法,除了要与原方法具有相同的简单名称之外,还要求必须拥有一个与原方法不同的特征签名。特征签名是指一个方法中各个参数在常量池中的字段符号引用的集合,也正是因为返回值不会包含在特征签名之中,所以Java语言里面是无法仅仅依靠返回值的不同来对一个已有方法进行重载的。但是在Class文件格式之中,特征签名的范围明显要更大一些,只要描述符不是完全一致的两个方法就可以共存。也就是说,如果两个方法有相同的名称和特征签名,但返回值不同,那么也是可以合法共存于同一个Class文件中的。


代码清单10-10中的重载当然不是根据返回值来确定的,之所以这次能编译和执行成功,是因为两个method(方法加入了不同的返回值后才能共存在一个Class文件之中。第6章介绍Class文件方法表( method_info) 的数据结构时曾经提到过,方法重载要求方法具各不同的特征签名,返回值并不包含在方法的特征签名中,所以返回值不参与重载选择,但是在Class文件格式之中,只要描述符不是完全一致的两个方法就可以共存。 也就是说两个方法如果有相同的名称和特征签名,但返回值不同,那它们也是可以合法地共存于一个Class文件中的。