天天看點

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。