Javaの参照渡しの不思議な現象の検証4

じゃ、Beanに詰め込んでみますか?ってことで
以下、ソースと実行結果。

public class bean {

	private String str;

	public String getStr() {
		return str;
	}
	public void setStr(String str) {
		this.str = str;
	}
}
public class testset4 {

	
	public static void main(String[] args) {

		int cnt = 0;

		bean nullString =  new bean(); nullString.setStr(null);
		bean emptyString = new bean(); emptyString.setStr("");
		bean spaceString = new bean(); spaceString.setStr(" ");
		bean fixString =   new bean(); fixString.setStr("Foo");
		bean refString1 =  new bean(); refString1.setStr(new String());
		bean refString2 =  new bean(); refString2.setStr(new String("Bar"));

		System.out.println("----------" + testset4.class.getName() + "----------");

		System.out.println("----------");
		System.out.println("nullString");
		System.out.println("before[" + nullString.getStr() + "]");
		method(nullString, cnt);
		System.out.println("after [" + nullString.getStr() + "]");
		cnt++;
	
		System.out.println("----------");
		System.out.println("emptyString");
		System.out.println("before[" + emptyString.getStr() + "]");
		method(emptyString, cnt);
		System.out.println("after [" + emptyString.getStr() + "]");
		cnt++;
	
		System.out.println("----------");
		System.out.println("spaceString");
		System.out.println("before[" + spaceString.getStr() + "]");
		method(spaceString, cnt);
		System.out.println("after [" + spaceString.getStr() + "]");
		cnt++;
	
		System.out.println("----------");
		System.out.println("fixString");
		System.out.println("before[" + fixString.getStr() + "]");
		method(fixString, cnt);
		System.out.println("after [" + fixString.getStr() + "]");
		cnt++;
		
		System.out.println("----------");
		System.out.println("refString1");
		System.out.println("before[" + refString1.getStr() + "]");
		method(refString1, cnt);
		System.out.println("after [" + refString1.getStr() + "]");
		cnt++;

		System.out.println("----------");
		System.out.println("refString2");
		System.out.println("before[" + refString2.getStr() + "]");
		method(refString2, cnt);
		System.out.println("after [" + refString2.getStr() + "]");
		cnt++;
		
	}
	
	private static void method(bean bean, int cnt) {
		String tmp = new Integer(cnt).toString();
		System.out.println(tmp);
//		str = str + tmp;
		bean.setStr(bean.getStr() + tmp);
		System.out.println(bean.getStr());
	}
}
----------testset4----------
----------
nullString
before[null]
0
null0
after [null0]
----------
emptyString
before[]
1
1
after [1]
----------
spaceString
before[ ]
2
 2
after [ 2]
----------
fixString
before[Foo]
3
Foo3
after [Foo3]
----------
refString1
before[]
4
4
after [4]
----------
refString2
before[Bar]
5
Bar5
after [Bar5]

変わったー。
なんで?