2017年05月29日

文字列の結合の細かい話

ご存知のように、Javaで文字列を結合する時には ”+”演算子でできる。
こんな風に書ける、ということね。

        String s3=s1+s2;
これはコンパイル時に、StringBuilder.appendに書き換えられるわけなんだが、
こんな風に。

   4:    astore_2
   5:    new    #3; //class java/lang/StringBuilder
   8:    dup
   9:    invokespecial    #4; //Method java/lang/StringBuilder."<init>":()V
   12:    aload_1
   13:    invokevirtual    #5; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
   16:    aload_2
   17:    invokevirtual    #5; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
   20:    invokevirtual    #6; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;
   23:    astore_3


これはJDK1.5以上での話で、もーっと化石なバージョンだと、これは
StringBuffer.appendになる。
StringBufferはMTセーフであるが、Builderはセーフじゃない。

まぁ、こんなテンポラリな短命オブジェクトがMTセーフである必要はないやな。

posted by koteitan at 17:37| Comment(0) | TrackBack(0) | Java | このブログの読者になる | 更新情報をチェックする

2017年05月17日

Aixでのjava.util.prefs.Preferences

Preferencesの使い方などはいろいろな記事があるので割愛するとして、
保存先はどこなんだYO!ってところだけ備忘録。
Aixで使う状況と需要があるのかよくわからないですが( ´∀`)

1.systemNodeForPackage 
/usr/java7/jre/.systemPrefs 以下
バイナリの場所に…(;´Д`)ファイルセットアップデートとか注意やぞ。
また、複数のJREが入っている場合は実行したJREでしか効かない。

2.userNodeForPackage
これはlinuxとかと同じ
$HOME/.java/.userPrefs 以下

つまり、複数のJREで実行された場合、同じユーザーであれば、userNodeは引き継げるが
systemNodeは独立しているんだよ! 

ΩΩΩ<ナンダッテー!

/etc/.java に入るlinuxとは違うみたいやね。
posted by koteitan at 11:56| Comment(0) | TrackBack(0) | Java | このブログの読者になる | 更新情報をチェックする