それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Java.util.Properties のデフォルトは参照渡し

たとえば、こんなJSPコードを書く *1

<%@ page
  contentType="text/html; charset=shift_jis"
  import="java.util.*,java.io.*"
%><%
/////////////////////////////////////////////////
//DBから検索
/////////////////////////////////////////////////
DataObject table = new DataObject( ini );
table.id = "123456";
table.find(true);
if( table.title == null ){
	out.print("該当するレコードがありません");
}
/////////////////////////////////////////////////
//レコードをPropertiesにセットする
/////////////////////////////////////////////////
Properties prop = new Properties();
prop.setProperty( "title"        , new String( table.title         ) );
prop.setProperty( "filename"     , new String( table.filename      ) );
prop.setProperty( "description"  , new String( table.description   ) );
prop.setProperty( "userid"       , new String( table.userid        ) );
/////////////////////////////////////////////////
//Propertiesをデフォルトに新しいPropertiesを作る
//    javascriptのprototypeみたいなもん
/////////////////////////////////////////////////
Properties _default = new Properties( prop );

out.print(prop);
out.print(_default);
%>

これを実行すると、propと_defaultが同じになるはず。Propertiesのコンストラクタで、デフォルトを与えるのだから。しかし一致しなかった。_defaultは空だった。

prop.setProperty( "userid"       , new String( table.userid        ) );

この new String() した部分にポイントがありそうだ。new したのでStringインスタンスへの参照がややこしいことになってるのかもしれない。今度、もうちょっと調べてみたい。

*1:Javaテストコード書くのに、public static void main()や Test.java class Test{} などと書くのは面倒だ。JSPで、さっとテストが好き。コード書く手間が少なくていい