Javaプログラム作成時の注意点

最近、気温の下がり具合がなかなかのものですね。
外での作業を行う時などは、防寒具をしっかり着こまないと
作業に支障が出ること必至です。まあ暑いよりはマシですが。


さて、表題の件です。
最近は業務でよくJavaプログラムを編集することが多いのですが、
その際、いくつか気を付けるべき点があるなと思ったので
備忘録もかねて書き出していきたいと思います。

・文字列比較はequalsなどで
個人的に一番ハマりやすいのがこれかなと思います。

基本的に変数の比較をするときは == といった演算子を使用するものですが、
文字列(String)型の比較は以下の方法を使用しなければなりません。

String str1 = "a";
String str2 = "a";

if (str1.equals(str2)) {
    //
}

正確には、Integer型やDouble型なども同様ではありますが、
それらはintやdoubleなどプリミティブな型もあるのに対し、
文字列型はStringしか無いため、必ずequalsなどの比較メソッドを使用する必要があります。

これを忘れると、「何故if条件の中に入ってこないのか」と悩む羽目になります。

・マルチプラットフォームを意識する
これはJavaに限った話ではないですが、アプリを動作させるのはWindows上とは限らず、
Linux上で動かす事もあります。
その時、例えばファイルパスを「config\data\…」といった指定にしていた場合、
Linux上では正しく動かなくなります。(「config/data/…」ならOK)

Javaは結構Linux上で動かすことも多いので、こういった違いは意識しておいた方が
無難ですね。

・プリミティブ型とクラス型の使い分け
変数の型には、プリミティブ型とクラス型があります。
具体的には、int型がプリミティブ、integer型がクラスですね。
この2つは、数値を扱うという意味では同じですが、使い方が結構違います。
詳しく書くと長くなりすぎるため、簡単に違いを列挙してみます。

クラス型は、宣言時にnewが必要
クラス型には、便利なメソッドが用意されている(文字列変換など)
クラス型は、比較するとき == や > などを使用してはならない(メソッドで実施)
クラス型は、nullを設定することが出来る

用途によって使い分けるようにしましょう。

・isNullとnonNull
変数がnullかどうかを判定する際、以下のメソッドを使用することを推奨されています。

Integer i = null;

if (Objects.isNull(i)) {
    //
}

Integer j = new Integer(1);

if (Objects.nonNull(j)) {
    //
}

別に(変数 == null)などで判定しても良いといえば良いのですが、可読性などの理由で
推奨されている感じですね。特に理由が無ければこれらを使っておいたほうが良いでしょう。

とりあえずこんなところでしょうか。
慣れてきた頃にequalsの事を忘れたりするので、自分も注意したいと思います。

以上