java

AutoUnboxingの落とし穴

久しぶりにJavaをデバッグしてて思わぬところで悩んだのでメモ。久しぶりのJavaネタです。 String s = convHoge(p.id); スタックトレースを確認するとこの行でNullPointerExceptionが発生していました。メソッド内のトレースは含まれていないので間違いなく…

配列オブジェクトの動的削除

シーケンシャルオブジェクトから指定の値を削除する際のバグ例を書いてみます。 プログラミング慣れした人は簡単に気が付くと思いますが意外に多いバグだと思います。下記は配列の中から"a2"という値をすべて削除するjavascriptの例です。 var a = new Array…

finally句におけるreturnの問題

finally句でreturnしたコードを見かけることがあります。eclipseで開発している場合、finally句でreturnを記述すると警告が出るのですが何が問題なのかあまり知られていないようです。 try-finallyにおける様々の位置のreturnの検証 try-finallyでreturnする…

中括弧省略の弊害

可読性を落とすと思われるif文の中括弧省略についてです。 Javaにおいてif文の中括弧を省略した場合、その次の1文だけが対象となります。 if ( 式 ) a = 1; // 式が真の場合実行 b = 2; //必ず実行 上記程度であれば第3者でも判断できるのですが、次の場合…

デフォルトコンストラクタ自動生成の謎

半年位前に経験したバグなのですが、突然あるクラスのデフォルトコンストラクタが見つかりませんという内容のExceptionが発生しました。 原因は他プロジェクトのjarに梱包された型をデフォルトコンストラクタでインスタンス化していたのですが、このjar側の…

SAXパーサ作成時のバグ

以前作成したJavaのSAX方式(ストリーム読込)のXMLパーサのトラブルメモ。 長いXMLを読むだけであればメモリパフォーマンスを考慮してSAXパーサを使用しますが、ちょっと意識していないとバグ埋め込んでしまうかも知れません。 サンプルコード public class P…

引数を省略するメソッドの考察

ruby、C++、VB、C#には引数のデフォルト値を設定して(Optional等)、 引数を省略できる言語仕様になっています。何故Javaには導入されていないんだろうか? ふと疑問が湧きました。 実際には以下のようにオーバーロードで対応していると思います。 method(int…

浮動小数の誤差

2進計算による浮動小数の誤差について意識なく平気で演算したり比較するケースをよく見かけます。 大抵はあまり問題は発生しないのですが、特殊なケースで予想と反する結果となります。色々と試してみました。 Ruby(irb)の場合 irb(main):001:0> 1-0.9 == 1/…