为什么要用返回值而非函数参数

在学习Java时,看到一个例子

package com;

public class MethodDemo{
    public static void main(String[] args){
    		boolean flag = true;
    		System.out.println(flag);
    }
    public static boolean isEvenNumber(int number){
    		if(number%2 == 0){
    		    return true;
    		} else {
    		    return false;
    		}
    }
}

当时在想为什么不直接在方法体中输出而要通过返回值,搜索得到

主要区别应该是:
调用者必须负责分配或者声明输出参数的存储,必须负责输出参数的有效性。如果这个参数本身是非法的,则往输出参数写数据会出现不可预期的后果。
而对返回值来说,调用者不需要预先分配返回值所占用的空间,这个空间必然存在,它是在生成返回值的时候自动创建的。用买奶茶打比方的话,输出函数类似于你去买奶茶必须自带杯子不然什么都得不到,而返回值意味着卖家提供了已经打包好的奶茶。
换个角度,对于一个函数来说,只有返回值是必定有效的对外沟通渠道,而调用者传入的输出参数完全可能是非法的。——这个特性使得一个有效的尾递归必须通过返回值实现。因为尾递归要求在递归函数调用之后不含有任何其他操作,此时并没有能够分配输出参数的空间。尾递归通过直接切换栈实现,是没有栈溢出问题的,可以无限递归层次,而普通递归有栈溢出问题,使用输出参数只能实现普通递归,正确的尾递归只能在有返回值的编程语言中实现。

作者:pansz
链接:https://www.zhihu.com/question/303001461/answer/550088436
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值