Java通过值传递;没有
out像C#这样的参数。
您可以使用
return,或更改 作为 参考传递的对象( 按 值)。
代码样例
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!" }}至于OP需要帮助的代码,以下是使用特殊值(通常
null用于引用类型)指示成功/失败的典型解决方案:
代替:
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返回类型,
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()例如,这是这样工作的:它返回
instanceofString(也许是一个空字符串!),直到返回
null以指示“搜索”结束。
当然,这不限于引用类型的返回值。关键是必须有一些永远都不是有效值的特殊值,并且您可以将该值用于特殊目的。
另一个经典示例是
String.indexOf:它返回
-1以指示搜索失败。
注意 :由于Java没有“输入”和“输出”参数的概念,因此不需要使用
i-ando-前缀(例如)。iAddress``oPerson
更一般的解决方案
如果您需要返回多个值,通常它们是以某种方式关联的(例如
x和
y单个的坐标
Point)。最好的解决方案是将这些值封装在一起。人们使用
Object[]或
List<Object>或通用
Pair<T1,T2>,但实际上,最好使用您自己的类型。
对于此问题,我建议使用这样的不可变
SearchResult类型来封装
boolean和
String搜索结果:
public class SearchResult { public final String name; public final boolean isFound; public SearchResult(String name, boolean isFound) { this.name = name; this.isFound = isFound; }}然后,在搜索功能中,执行以下操作:
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不可变字段设置为non-
public,而改用
publicgetter。



