ぷろぐらむおいしいよ

技術ネタを適当に書いていきます。

Stringがnullの時に文字列を追加する

さて、ある変数が何のオブジェクトも参照してないときにメソッドを呼ぼうとしたりするとNullPointerExceptionになる。
その場合は分かりやすいが、"+"を使うときは注意が必要だ。

下記に簡単な例を示す。

public class Main {
	public static void main(String[] args) {
		String s = null;
		s += "hogehoge";
		System.out.println(s); //nullhogehogeが出力される

		String s2 = null;
		s2 = s2.concat("hogehoge"); //ここでエラーになる
		System.out.println(s2);
	}
}

nullなStringに対してメソッドの呼び出しはエラーになるが、"+"で文字列を追加した場合にはエラーにはならず先頭に"null"という文字列が付加される。*1

対処方法

冒頭には"+"に注意と書いたが、Stringに文字列を追加するときには"+"を頻繁に使うので、むしろ初期化のほうで対処したほうがよいと思われる。

標準の書き方は知らないが、*2

String s1 = "";
String s2 = new String();

このどちらかで初期化したほうが安全だと思われる。

もしくは

String s3;

とだけ書いておいて利用時にだけ文字列を代入するようにしても良いかもしれない。

このs3にいきなり

s3 += "hogehoge";

などとしようとすると、これはコンパイルエラーになる。

*1:JDK6で実行しているので、もしかしたら他のバージョンでは違う結果になるかもしれない

*2:知ってる人がいたら教えて欲しいかも、、