在学习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
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。