>Six Perfections 2009/04/27 (月) 03:59:36        [qwerty]
> > <ソース>
> > public class test {
> > 	public static void main(String[] args) {
> > 		String sb1 = new String("aaa");
> > 		String sb2 = new String("bbb");
> > 		String sb3 = new String();
> > 		String sb4 = new String();
> > 		sb4=sb1;
> > 		System.out.print("---stringchange実行前---" + "\n");
> > 		System.out.print("sb1:" + sb1 + "\n"); 
> > 		System.out.print("sb2:" + sb2 + "\n"); 
> > 		System.out.print("sb3:" + sb3 + "\n"); 
> > 		System.out.print("sb4:" + sb4 + "\n");
> > 		System.out.print("\n");
> > 		stringchange(sb1);
> > 		sb4=sb1;
> > 		System.out.print("---stringchange実行後---" + "\n");
> > 		System.out.print("sb1:" + sb1 + "\n"); 
> > 		System.out.print("sb2:" + sb2 + "\n"); 
> > 		System.out.print("sb3:" + sb3 + "\n"); 
> > 		System.out.print("sb4:" + sb4 + "\n");
> > 		
> > 	}
> > 	static void stringchange(String sbchange) {
> > 		sbchange = "xxx";
> > 	}
> > }
> > <実行結果>
> > ---stringchange実行前---
> > sb1:aaa                    僕の期待値:aaa
> > sb2:bbb                    僕の期待値:bbb
> > sb3:                       僕の期待値:
> > sb4:                       僕の期待値:aaa
> > ---stringchange実行後---
> > sb1:aaa                    僕の期待値:xxx
> > sb2:bbb                    僕の期待値:bbb
> > sb3:                       僕の期待値:
> > sb4:aaa                    僕の期待値:xxx
> > sb1を"xxx"へ変えたい(´ω゚)伴ってsb4の内容も書き換えたい(´ω゚)結論できない
> > stringchangeではsb1変数の参照アドレスと同じ参照アドレスを保持した変数sbchangeが新規作成される
> > sbchange = "xxx";が実行される前のsb1変数とsbchange変数は同じ1つのオブジェクト参照する(´ω゚)ここまでは値渡し
> > しかしながら(´ω゚)sbchange = "xxx";を実行した際に(´ω゚)xxxの実体が生成されsbchange変数の参照アドレスはxxxの実体用に再決定される。
> > めちゃくちゃ疲れました結局returnで書き換えるよね?みんな実体を返せばいいよ(´ω゚)アドレス書き換えはできない
> <実行結果>
> ---stringchange実行前---
> sb1:aaa                    僕の期待値:aaa
> sb2:bbb                    僕の期待値:bbb
> sb3:                       僕の期待値:
> sb4:aaa                    僕の期待値:aaa
> ---stringchange実行後---
> sb1:aaa                    僕の期待値:xxx
> sb2:bbb                    僕の期待値:bbb
> sb3:                       僕の期待値:
> sb4:aaa                    僕の期待値:xxx

上の見てて悩んだが
こっちが正しい結果だよね?(;´Д`)
stringchangeの関数内はローカルのポインター変数のポインターを書き換えてるだけだから意味がない
関数内で処理したいなら
文字列をコピーするようすればいいよ(;´Д`)

参考:2009/04/27(月)03時53分40秒