Javaで関数に引数を渡す際、値渡しと参照渡しの方法があります。
(初心者向けです。厳密には違うかもしれないです。)
今回はStringとStringBuilderで、
実際にどういうものかはコードと実行結果でみていきましょう。
package test;
/**
* 値渡しと参照渡し
*/
public class Test {
public static void main(String[] args) {
String str = "abcde";
StringBuilder sb = new StringBuilder("abcde");
strAppend(str);
sbAppend(sb);
System.out.println(str);
System.out.println(sb.toString());
}
public static void strAppend(String str) {
str = str + "アイウエオ";
}
public static void sbAppend(StringBuilder sb) {
sb.append("アイウエオ");
}
}
こちらが実行結果になります。
abcde
abcdeアイウエオ
StringもStringBuilderもどちらもに「abcde」を挿入して、
その変数を関数に渡してみて、その関数の中で変数に「アイウエオ」と繋げる処理を入れてみました。
どちらの関数もvoidで戻り値は受け取っていませんが、
その変数を出力させてみると実行結果は異なっています。
これはStringが値渡しで、
StringBuilderが参照渡しということで実行結果が異なっています。
値渡しはコピーをして渡すので、その本物の変数に影響がないので
もしStringを関数で変更したい場合は、戻り値をStringにしてあげて、Stringで受け取る必要があります。
参照渡しは本物を渡しているイメージになるので、戻り値の必要がありません。
参照クラスを関数で処理する際に引数で渡す際は、受け取る必要がないということですね。
厳密にはちょっと違うかもしれないので、
詳しく知りたいかたは他にも「値渡しと参照渡し」で調べてみてください。
コメント