|
||||||||||||||||||||||||||
| 前のページ 1 2 3 4 次のページ | ||||||||||||||||||||||||||
| 文字列リテラルはnewしない(C_STR002) | ||||||||||||||||||||||||||
|
文字列リテラルを保持するためのStringオブジェクトを生成する際、newは使用しないようにします。これは、newを使用するとJava VMによっては無駄なStringインスタンスが生成されてしまうからです。 |
||||||||||||||||||||||||||
private String badSampleString = new String ("Literal"); ⁄⁄悪い例
|
||||||||||||||||||||||||||
|
例に示した2つのStringオブジェクトはどちらも同じ内容の文字列を保持していますが、生成されるインスタンス数が異なります。不必要なメモリ消費を抑えるために、Stringではnewを使用しないようにしてください。 |
||||||||||||||||||||||||||
| 更新される文字列にはStringBufferクラスを利用する、更新されない文字列にはStringクラスを利用する(C_STR003、C_STR004) | ||||||||||||||||||||||||||
|
Stringのオブジェクトは固定文字列であり、値を更新するたびに新たなオブジェクトが生成されます。 よって変更される文字列はStringBufferオブジェクトで定義し、文字列連結の際にはStringBufferクラスのappend()メソッドを用います。 一方、変更されない文字列はStringBufferオブジェクトで定義するのではなく、Stringオブジェクトを使用します。Stringオブジェクトを使用することでメモリ操作が行われなくなるので、パフォーマンスの向上につながります。 パフォーマンスの悪化を防ぐために、文字列が変更されるのかされないのかを見極め、どちらのオブジェクトを使用すべきか正しく判断してください。 |
||||||||||||||||||||||||||
| 文字列リテラルと変数を比較するときは、文字列リテラルのequals()メソッドを利用する(C_STR005) | ||||||||||||||||||||||||||
|
文字列リテラルと変数を比較する場合、2通りの記述があります。 Stringオブジェクトのequals()メソッドを使う場合 |
||||||||||||||||||||||||||
public boolean validate (String userInput) {
|
||||||||||||||||||||||||||
|
この場合、equals()メソッドを呼ぶ前にStringオブジェクトがnullでないことを確認する必要があります。 文字列リテラルのequals()メソッドを使う場合 |
||||||||||||||||||||||||||
public boolean validate (String userInput) {
|
||||||||||||||||||||||||||
|
一方こちらの場合は、文字列リテラルはnullでないことが明らかなため、nullの確認は必要ありません。nullの確認の実装漏れによるバグ防止、またはコードの可読性・保守性向上のために、文字列リテラルのequals()メソッドを使用してください。 |
||||||||||||||||||||||||||
| プリミティブ型とStringオブジェクトの変換には、変換用のメソッドを利用する(C_STR006) | ||||||||||||||||||||||||||
|
String型とプリミティブ型との変換には様々な方法がありますが、表記を統一することで誰が読んでもわかりやすいコードになります。
表2:String型とプリミティ型の変換
これら変換用メソッドを使用することで誰が書いても同じ表現に統一され、結果としてコードの可読性・保守性・プログラムの処理効率の向上につながります。 |
||||||||||||||||||||||||||
| 文字列の中に、ある文字が含まれているか調べるには、charAt()メソッドを利用する(C_STR007) | ||||||||||||||||||||||||||
|
文字列の中にある1文字が含まれているかを調べる場合は、StringクラスのcharAt()メソッドを使用してください。 よくある例として、startsWith()を使用してある1文字ではじまるかを調べているコードを見かけます。startsWith()メソッドは複数文字列を引数の対象とするため、これはString APIの誤った使用法です。 なお、startsWith()をcharAt(0)に置き換える際は、以下のように文字列の長さの確認を忘れないように注意してください。 |
||||||||||||||||||||||||||
public boolean checkHead (String checkString) {
|
||||||||||||||||||||||||||
| システム依存記号(\n、\rなど)は使用しない(C_STR008) | ||||||||||||||||||||||||||
|
ポータビリティ(移植性)を維持するために、「\n」や「\r」などのシステム依存記号は使用せずにSystem.getProperty()メソッドを使用してください。「\n」や「\r」などを改行コードとしてコードにリテラルで使用した場合、OSが変わると正しく動作しなくなります。 これでは、Javaの特徴「Write Once, Run Anywhere」が失われてしまいます。 システム依存記号ではなく、下記のようにシステムに応じた改行コードやファイル区切り文字を取得するようにしてください。 |
||||||||||||||||||||||||||
System.getProperty("line.separator")
|
||||||||||||||||||||||||||
|
前のページ 1 2 3 4 次のページ |
||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
|
||||||||||||||||||||||||||

