String
プログラミング中に使用することが有用かどうかを理解しようとしています。私たちのグループには、使用String
は悪い習慣でありenum
、行く道があるという一般的な考えがありますが、反対票を投じるのに十分な理由を見つけることができませString
ん。問題に関する考えと例は?
アップデート:
私の質問を言葉に言い換えるString
必要dataType
があります。
String
は便利で、テキスト データを表現する最良の方法です。以下を表すために文字列を使用しないでください。
enum
)。たとえば、いいえ、"cm"
単位として。これらの要素で列挙型を使用します。など"mm"
"km"
Unit
Unit.cm
int
、double
などを使用)Date
、Calendar
または joda-time を使用DateTime
)char[]
代わりに使用します。文字列は JVM によって異なる方法で処理され、攻撃者が機密情報にアクセスできる可能性があるためです。byte[]
、 を使用しnew String(bytes)
て転送しないでください。情報が失われる可能性があります。Base64、Hex などでエンコードされている場合、文字列はバイナリ コンテンツを表すことができます。あなたが尋ねているなら
...
public enum Settings {
FAST,SLOW,PRECISE
}
...
if(setting == Settings.FAST) {
...
}
よりも良い
...
if("FAST".equals(setting)) {
...
}
...
答えはイエスです。enum の方が優れています。なぜなら、.equals() の代わりに == と比較できるためです。これにより、おそらく実行可能ファイルが高速になり、書き込みが容易になります。さらに、文字列値では使用できない場合、および enum では switch を使用できます。列挙フラグの代わりに文字列値をチェックしている場合、NetBeans や Eclipse などの優れた IDE を活用して、IDE やコンパイラを通過するタイプミスを回避できます。
java.lang.String
悪ではない。実際、これはおそらく Java で最も一般的に使用されているクラスです (免責事項: それを裏付けるデータはありません)。ただし、いくつかの考慮事項があります。
パスワードを収集して java.lang.String 型のオブジェクトに格納するのは理にかなっているように思われます。ただし、ここで注意が必要です: String 型のオブジェクトは不変です。つまり、使用後に String の内容を変更 (上書き) したりゼロにしたりするメソッドは定義されていません。この機能により、String オブジェクトは、ユーザー パスワードなどの機密性の高い情報を格納するのには適していません。代わりに、常にセキュリティの機密情報を収集して char 配列に格納する必要があります。
-- http://docs.oracle.com/javase/1.4.2/docs/guide/security/jce/JCERefGuide.html#PBEEx
StringBuilder
文字列を連結する場合、java.lang.String
は不変であり、連結ごとに新しいコピーが作成されるため、おそらく使用する必要があります。
列挙型、数値、日付などのより特殊なクラスが存在する場合は、文字列よりも優先されます。
使用の不幸な側面の1つは、JDK7より前ではステートメントString
で機能しないことです。代わりに(この目的でsをswitch...case
使用する場合)使用する必要があります。また、の代わりにを使用してテストする必要があります。状況によっては、代わりに使用することもできます。これらのすべては、そのような状況のために私を好む傾向があります。String
if...else if...else
.equals()
==
.equalsIgnoreCase()
enum
String
文字列自体は悪ではありません。
それを主要な抽象化として使用すると、害が生じると思います。明らかに関連しているが、コード全体に散在しているプリミティブ(文字列、int、配列、データ構造など)がたくさんあるコードでそれを確認できます。
このような場合のより良い解決策は、一緒に属するデータ項目を適切なオブジェクトにカプセル化することです。
場合によります。このリストがすべてを網羅しているわけではないと思います。
長所:
Java SE 7: String - String クラスは不変であるため、String を共有できます (これは、スレッド セーフも意味します)。
Java の文字列プール- 文字列はプールされるため、再利用する際に効率的です。
短所:+
複数の文字列に対して使用する場合、連結操作は効率的ではありません。StringBuilder
またはStringBuffer
(スレッドセーフ) またはを使用することをお勧めしますRopes
。これを参照してください: IBM: Ropes