java 参数输出_如何在Java中使用输出参数?

Java通过价值传递; 没有像C#中的out参数。

您可以使用return ,也可以改变作为参考传递的对象( 按值)。

相关问题

Java有类似C#的ref和out关键字吗? ? (没有!)

Java通过引用传递? (没有!)

代码示例

public class FunctionSample { static String fReturn() { return "Hello!"; } static void fArgNoWorkie(String s) { s = "What am I doing???"; // Doesn't "work"! Java passes by value! } static void fMutate(StringBuilder sb) { sb.append("Here you go!"); } public static void main(String[] args) { String s = null; s = fReturn(); System.out.println(s); // prints "Hello!" fArgNoWorkie(s); System.out.println(s); // prints "Hello!" StringBuilder sb = new StringBuilder(); fMutate(sb); s = sb.toString(); System.out.println(s); // prints "Here you go!" } }

也可以看看

什么是不可改变的?

Java中的StringBuilder和StringBuffer

至于OP需要帮助的代码 ,下面是一个使用特殊值(通常为null用于引用types)的典型解决scheme来指示成功/失败:

代替:

String oPerson= null; if (CheckAddress("5556", oPerson)) { print(oPerson); // DOESN'T "WORK"! Java passes by value; String is immutable! } private boolean CheckAddress(String iAddress, String oPerson) { // on search succeeded: oPerson = something; // DOESN'T "WORK"! return true; : // on search failed: return false; }

改用String返回types,用null表示失败。

String person = checkAddress("5556"); if (person != null) { print(person); } private String checkAddress(String address) { // on search succeeded: return something; : // on search failed: return null; }

这就是java.io.BufferedReader.readLine()工作方式,例如:它返回instanceof String (也许是一个空string!),直到它返回null来表示“search”结束。

当然,这并不限于引用types的返回值。 关键是必须有一些特殊的价值永远不是一个有效的价值,你用这个价值的特殊用途。

另一个经典的例子是String.indexOf :它返回-1来表示search失败。

注意 :因为Java没有“input”和“输出”参数的概念,所以使用i-和o-前缀(例如iAddress , oPerson )是不必要和单一的。

更一般的解决scheme

如果您需要返回多个值,通常它们以某种方式相关(例如,单个Point x和y坐标)。 最好的解决scheme是将这些值封装在一起。 人们使用了一个Object[]或一个List ,或者一个普通的Pair ,但是真的,你自己的types是最好的。

对于这个问题,我推荐一个像这样的不可变的SearchResulttypes来封装boolean和Stringsearch结果:

public class SearchResult { public final String name; public final boolean isFound; public SearchResult(String name, boolean isFound) { this.name = name; this.isFound = isFound; } }

然后在你的searchfunction中,你可以做到以下几点:

private SearchResult checkAddress(String address) { // on address search succeed return new SearchResult(foundName, true); : // on address search failed return new SearchResult(null, false); }

然后你这样使用它:

SearchResult sr = checkAddress("5556"); if (sr.isFound) { String name = sr.name; //... }

如果你愿意,你可以(也可能应该)使final不可变字段不public ,并使用public getter。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值