>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秒