void类型方法与带返回值方法的区别?为何输出结果一致
void方法与带返回值方法的核心区别
嘿,这个问题问得特别到位!虽然在你这个两数求和的例子里,两种写法最终的控制台输出看起来一样,但它们的设计思路、灵活性和复用性简直天差地别,咱们掰开揉碎了说:
1. 职责单一性:做一件事,做好一件事
你的void版本getSum方法,既完成了“计算两数之和”的逻辑,又顺手做了“打印结果”的操作——相当于把计算逻辑和展示逻辑硬绑在了一起。
要是之后需求变了:比如你想把这个求和结果用来乘2,或者存到数据库里,这个void方法就完全帮不上忙了,你得重新写一个只做计算的方法。
而带返回值的版本就不一样了,它只负责计算并返回结果,怎么用这个结果全由调用它的地方决定:
import java.util.Scanner; public class NewClass { public static void main(String[] args) { Scanner input = new Scanner (System.in); System.out.println("enter x"); int x = input.nextInt(); System.out.println("enter y"); int y = input.nextInt(); // 获取求和结果,后续想怎么用就怎么用 int sumResult = getSum(x,y); System.out.println("sum = " + sumResult); System.out.println("sum的2倍是:" + sumResult * 2); // 甚至可以把结果传给另一个方法 saveResultToDB(sumResult); } // 只做求和,职责纯粹 public static int getSum(int x, int y) { return x + y; } // 模拟保存结果到数据库的方法 public static void saveResultToDB(int result) { // 这里写保存逻辑 } }
这种“单一职责”的设计,是写出可维护代码的基础。
2. 灵活性与复用性:结果由你掌控
void方法执行完就结束了,它的计算结果没有办法被后续代码获取——就像你把做好的饭直接倒进垃圾桶了,只能看一眼,没法再利用。
带返回值的方法则是把计算结果“交还给调用者”,你可以:
- 把结果存进变量,后续多次使用
- 把结果作为参数传给其他方法
- 根据结果做分支判断(比如如果和大于100就触发某个操作)
- 把结果存入集合、文件等持久化存储
这种灵活性意味着,这个getSum方法可以在项目的任何地方被复用,而不是只能用来打印一次。
3. 可读性与可维护性:让代码自己“说话”
当别人(或者几个月后的你自己)看代码时:
- 看到
int sum = getSum(x,y),立刻就能明白“这个方法是用来获取两数之和的” - 但看到
getSum(x,y)(void版本),必须点进方法内部才能知道它到底做了什么——是打印了?还是修改了某个全局变量?
而且如果需求变更(比如求和结果要改成输出到文件而不是控制台):
- 带返回值的版本只需要修改main方法里的处理逻辑,
getSum完全不用动 - void版本则必须修改
getSum的内部代码,万一不小心改坏了原来的计算逻辑,就得不偿失了
4. 测试成本:带返回值的方法更好测
做单元测试的时候,带返回值的方法简直是福音:你只需要调用getSum(2,3),然后断言它的返回值是5就行,完全不用管控制台输出的事情。
但void版本的测试就麻烦多了——你得专门捕获控制台的输出内容,才能验证计算结果是否正确,测试成本高了不止一点。
简单总结一下:
- void方法适合那些只执行动作,不需要返回结果的场景:比如打印日志、修改某个对象的状态、发送消息等
- 带返回值的方法适合那些有计算逻辑,需要把结果传递出去的场景,尤其是你希望这个方法能被多处复用的时候
内容的提问来源于stack exchange,提问作者Noob programmer
相关产品推荐
相关产品推荐

