Javaの参照渡しの不思議な現象の検証2
その時は、サーブレットを書いていたんだけど、
インスタンス変数にして、インスタンス内でグローバルな感じで書いてみた。
その時は上手く行ったんだけど、、、
前回のソースをインスタンス変数に置き換えてみる。
public class testset2 { String nullString = null; String emptyString = ""; String spaceString = " "; String fixString = "Foo"; String refString1 = new String(); String refString2 = new String("Bar"); public static void main(String[] args) { new testset2().exec(args); } public void exec(String[] args) { int cnt = 0; System.out.println("----------" + testset2.class.getName() + "----------"); System.out.println("----------"); System.out.println("nullString"); System.out.println("before[" + nullString + "]"); method(nullString, cnt); System.out.println("after [" + nullString + "]"); cnt++; System.out.println("----------"); System.out.println("emptyString"); System.out.println("before[" + emptyString + "]"); method(emptyString, cnt); System.out.println("after [" + emptyString + "]"); cnt++; System.out.println("----------"); System.out.println("spaceString"); System.out.println("before[" + spaceString + "]"); method(spaceString, cnt); System.out.println("after [" + spaceString + "]"); cnt++; System.out.println("----------"); System.out.println("fixString"); System.out.println("before[" + fixString + "]"); method(fixString, cnt); System.out.println("after [" + fixString + "]"); cnt++; System.out.println("----------"); System.out.println("refString1"); System.out.println("before[" + refString1 + "]"); method(refString1, cnt); System.out.println("after [" + refString1 + "]"); cnt++; System.out.println("----------"); System.out.println("refString2"); System.out.println("before[" + refString2 + "]"); method(refString2, cnt); System.out.println("after [" + refString2 + "]"); cnt++; } private void method(String str, int cnt) { String tmp = new Integer(cnt).toString(); System.out.println(tmp); str = str + tmp; System.out.println(str); } }
以下、動作結果
----------testset2---------- ---------- nullString before[null] 0 null0 after [null] ---------- emptyString before[] 1 1 after [] ---------- spaceString before[ ] 2 2 after [ ] ---------- fixString before[Foo] 3 Foo3 after [Foo] ---------- refString1 before[] 4 4 after [] ---------- refString2 before[Bar] 5 Bar5 after [Bar]
あらー変わってない・・・
サーブレットって、スレッドセーフ問題とかあるから
クラス変数になるのかな?
あの時、static付けたっけ?