Javaコードアンチパターン 初級からプロまで知っておきたいミスと回避策 第1回議事録
[ 戻る ]
「Javaコードアンチパターン 初級からプロまで知っておきたいミスと回避策」を読む会 第1回
if文の後のスペースの有無など、フォーマットの統一性が議論となった。FindBugsの後継(フォーク版)。本家は更新が停止しているためこちらを推奨。コードの境界条件を書き換えた際、テストコードがそれを検知できるか(テスト自体の品質)を測定する手法。
<<, >>)は四則演算より優先度が低い。/ や *)を優先して使用する。hashCode は手動で計算せず、IDEの自動生成機能を利用する。【解説の訂正】最適化について: 現代のJITコンパイラが実行時に最適化を行うため、手動でシフト演算に書き換える必要性は低いです。
&& は || より優先される。【重要】型変換の注意: 片方が基本型、もう片方がラッパークラスの場合、ラッパークラス側はアンボクシングされます。nullの場合、
NullPointerExceptionが発生するため注意が必要です。
+ 演算子で文字列と数値を混在させない。MessageFormat.format や String.format の利用を推奨。 // 良い例
String entryName = MessageFormat.format("Entry#{0}", index + 1);
""" ... """) を活用する。x =+ y; は x = (+y); と解釈され、代入演算子 += とは全く異なる動きになる。+ は数値を加算する処理になるため、文字列結合を意図する場合は明示的に " で囲む等の対応が必要。| 項目 | 内容 | 訂正・補足 |
|---|---|---|
| シフト演算のマスク | int y = x << 32; の挙動 |
intの場合、下位5bit(0〜31)が使われるため、32シフトは0シフトと同じになります。longの場合は下位6bit(0〜63)が使われるため、32回シフトした結果が得られます。 |
| 文字列結合 | null + null が "nullnull" になる |
nullは文字列結合において "null" という文字列として扱われます。Java 9以降は invokedynamic による最適化が行われています。 |
| 最適化の調査 | 1.25倍がシフト演算に変換されるか | javap -c によるクラスファイルの確認や、HotSpot VMのオプションで実行時の挙動を確認する手法があります。 |
以上
[ 戻る ]