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 :
あれ……?