Javaの値渡しと参照渡し

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で受け取る必要があります。

参照渡しは本物を渡しているイメージになるので、戻り値の必要がありません。

参照クラスを関数で処理する際に引数で渡す際は、受け取る必要がないということですね。

厳密にはちょっと違うかもしれないので、
詳しく知りたいかたは他にも「値渡しと参照渡し」で調べてみてください。


よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次