2016-11-04 7 views
0

これは再投稿ではないことを願っています。私は私の質問に答えたものを見つけることができなかったので、私はこれを作ることにしました。代入演算子を使用してオブジェクトを返すことに違いがない理由

セイ例えば私は単語

arrayS[0] = Hello; 
arrayS[1] = World; 

有する文字列が今がString []メソッドを持って割り当てる

String [] arrayS = new String [2]; 

を有します。

public static String [] change(String [] sArray, String newWord){ 
     //Do Stuff 
    return sArray; 
    } 

したがって、代入演算子の有無にかかわらずメソッドを返すと、同じ結果が得られます。 例...

//This result 
String newWord = Hi; 
arrayS = change(arrayS, newWord); // With assignment operator. 
for(String word:arrayS) 
    System.out.println(word); 

//Is the same as this result 
String newWord = Hi; 
change(arrayS, newWord); // No assignment operator. 
for(String word:arrayS) 
    System.out.println(word); 

このような理由はありますか?私はいつもあなたが帰ってくるときに何かに代入演算子を持たなければならないと思った。しかし、私が配列Sを印刷すると、両方の方法で同じことができました。

+5

私は[Javaの参照渡しまたは値渡し]を見てみるべきだと思います(http://stackoverflow.com/questions/40480/is-java-pass-by-reference-or-pass-by - 値)、それはその上に何かの光を放つかもしれません。 – csmckelvey

+0

この場合、優先事項です。あなたが返す配列への参照は、あなたが既に呼び出したコードと同じものでなければならないので、参照を返す必要はありません。 –

答えて

1

実際にオブジェクトを返すわけではなく、オブジェクトへの参照を返しています。

public static String [] change(String [] sArray... 

メソッドがString[]への参照を受け取り、String[]への参照を返すことを意味します。これは、たとえこれらの参照が値渡しされたとしても、sArrayにローカルでchangeというメソッドに変更を加えると、そのオブジェクト自体に反映されることを意味します。

代入演算子と実行する必要のあるものには直接の相関はありません。メソッドがString[]を返した場合、それはsArrayと異なる何かを返すことができることを意味します。そうでなければ何も返さない理由はありません。例えば

、値を返すことは

String[] foo = new String[] {"foo"} 
String[] bar = new String[] {"bar"}; 
String[] chosen = choose(foo, bar); // this method could return foo or bar 

ような何かをやったときに意味を作ることができる。しかし、あなた自身がすべてがちょうどさらに混乱することで値を再割り当てするあなたの状況に何の意味がありません。

これらの考慮事項は、値渡しの値であるプリミティブ型には適用されません。

+0

プリミティブに注目する価値もある(正当なもの)この動作を共有しない – Rogue

関連する問題