StringBufferに関する面接問題

1308 ワード

public class Test {
	public static StringBuffer doSomething(StringBuffer buff) {
		buff = new StringBuffer();
		buff.append("Hello World");
		System.out.println(buff);  //Hello World
		return buff;
	}

	public static void main(String[] args) {
		StringBuffer buff = new StringBuffer();
		buff.append("Hello");
		System.out.println(doSomething(buff));  //Hello World
		System.out.println(buff);    //Hello
	}
}

 
 
 
2:doSomething()メソッドから削除:buff=new StringBuffer()
public class Test {
	public static StringBuffer doSomething(StringBuffer buff) {

		buff.append("Hello World");
		System.out.println(buff);  
		return buff;
	}

	public static void main(String[] args) {
		StringBuffer buff = new StringBuffer();
		buff.append("Hello");
		System.out.println(doSomething(buff)); 
		System.out.println(buff);   
	}
}

 
結果:
HelloHello WorldHelloHello WorldHelloHello World
 
技術的要点:1ではStringBufferオブジェクトが渡され,mainでのbuff参照はdoSomething()のパラメータに与えられているが,メソッド内部には別のオブジェクト(メモリ)への再指向がある.だから元のは役に立たない!
2は常にbuffオブジェクトです