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オブジェクトです