JavaのStringを勘違いしたまま使っていた件について

マルチポスト元→http://exth.net/~tgbt/wordpress/2009/08/19/2468/


ソースコード

import java.io.*;
/*
java の String の挙動を確認するテスト.
(data.txtの中身がhogeなら)全部 hoge が返るモノとばかり思っていたよ!!!
 */

public class fileio{
    public static final String CLASSNAME = "fileio";

    public static void test(String str)
    {
	str = "hoge";
    }

    public void test2(String str)
    {
	str = "hoge";
    }

    public static void InputString(String str, String filename){
	String HEADER = CLASSNAME + "::InputString ";
	try{
	    BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(filename)));
	    String line;
	    while((line = in.readLine())!=null)str+=line;
	    in.close();
	} catch(Exception e){
	    System.err.println(HEADER + e);
	}
    }

    public void InputString2(String str, String filename){
	String HEADER = CLASSNAME + "::InputString ";
	try{
	    BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(filename)));
	    String line;
	    while((line = in.readLine())!=null)str+=line;
	    in.close();
	} catch(Exception e){
	    System.err.println(HEADER + e);
	}
    }

    public static void main(String []args)
    {
	String HEADER = CLASSNAME + "::main ";
	String str = "";
	String filename = "data.txt";

	try{
	    BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(filename)));
	    String line;
	    while((line = in.readLine())!=null)str+=line;
	    in.close();
	} catch(Exception e){
	    System.err.println(HEADER + e);
	}
	System.out.println("べた書き");
	System.out.println("    : "+str);

	str = "";
	InputString(str, filename);
	System.out.println("static 関数");
	System.out.println("    : "+str);

	str = "";
	fileio f = new fileio();
	f.InputString2(str, filename);
	System.out.println("class メンバ関数");
	System.out.println("    : "+str);

	str = "";
	test(str);
	System.out.println("test 1");
	System.out.println("    : "+str);

	str = "";
	fileio f2 = new fileio();
	f2.test2(str);
	System.out.println("test 2");
	System.out.println("    : "+str);

    }
}


実行結果:

べた書き
    : hoge
static 関数
    : 
class メンバ関数
    : 
test 1
    : 
test 2
    : 

あれ……?