0

Stringプログラミング中に使用することが有用かどうかを理解しようとしています。私たちのグループには、使用Stringは悪い習慣でありenum、行く道があるという一般的な考えがありますが、反対票を投じるのに十分な理由を見つけることができませStringん。問題に関する考えと例は?

アップデート:

私の質問を言葉に言い換えるString必要dataTypeがあります。

4

6 に答える 6

8

Stringは便利で、テキスト データを表現する最良の方法です。以下を表すために文字列を使用しないでください。

  • 列挙可能な関連定数 ( を使用enum)。たとえば、いいえ、"cm"単位として。これらの要素で列挙型を使用します。など"mm""km"UnitUnit.cm
  • 数字 ( intdoubleなどを使用)
  • 日付 ( DateCalendarまたは joda-time を使用DateTime)
  • passwords -char[]代わりに使用します。文字列は JVM によって異なる方法で処理され、攻撃者が機密情報にアクセスできる可能性があるためです。
  • バイナリ コンテンツ。をお持ちの場合はbyte[]、 を使用しnew String(bytes)て転送しないでください。情報が失われる可能性があります。Base64、Hex などでエンコードされている場合、文字列はバイナリ コンテンツを表すことができます。
于 2012-04-18T17:46:23.273 に答える
2

あなたが尋ねているなら

...
public enum Settings {
    FAST,SLOW,PRECISE
}
...
if(setting == Settings.FAST) {
...
}

よりも良い

...
if("FAST".equals(setting)) {
...
}
...

答えはイエスです。enum の方が優れています。なぜなら、.equals() の代わりに == と比較できるためです。これにより、おそらく実行可能ファイルが高速になり、書き込みが容易になります。さらに、文字列値では使用できない場合、および enum では switch を使用できます。列挙フラグの代わりに文字列値をチェックしている場合、NetBeans や Eclipse などの優れた IDE を活用して、IDE やコンパイラを通過するタイプミスを回避できます。

于 2012-04-18T17:55:42.060 に答える
1

java.lang.String悪ではない。実際、これはおそらく Java で最も一般的に使用されているクラスです (免責事項: それを裏付けるデータはありません)。ただし、いくつかの考慮事項があります。

  • クリプト。暗号化パスワードを扱う場合、文字列よりも文字配列を優先する必要がある場合が 1 つあります。

パスワードを収集して 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は不変であり、連結ごとに新しいコピーが作成されるため、おそらく使用する必要があります。

  • 列挙型、数値、日付などのより特殊なクラスが存在する場合は、文字列よりも優先されます。

于 2012-04-18T17:49:24.553 に答える
0

使用の不幸な側面の1つは、JDK7より前ではステートメントStringで機能しないことです。代わりに(この目的でsをswitch...case使用する場合)使用する必要があります。また、の代わりにを使用してテストする必要があります。状況によっては、代わりに使用することもできます。これらのすべては、そのような状況のために私を好む傾向があります。Stringif...else if...else.equals()==.equalsIgnoreCase()enumString

于 2012-04-18T17:49:51.230 に答える
0

文字列自体は悪ではありません。

それを主要な抽象化として使用すると、害が生じると思います。明らかに関連しているが、コード全体に散在しているプリミティブ(文字列、int、配列、データ構造など)がたくさんあるコードでそれを確認できます。

このような場合のより良い解決策は、一緒に属するデータ項目を適切なオブジェクトにカプセル化することです。

于 2012-04-18T18:32:21.613 に答える
0

場合によります。このリストがすべてを網羅しているわけではないと思います。

長所:
Java SE 7: String - String クラスは不変であるため、String を共有できます (これは、スレッド セーフも意味します)。
Java の文字列プール- 文字列はプールされるため、再利用する際に効率的です。

短所:+複数の文字列に対して使用する場合、連結操作は効率的ではありません。StringBuilderまたはStringBuffer(スレッドセーフ) またはを使用することをお勧めしますRopes。これを参照してください: IBM: Ropes

于 2012-04-18T17:56:37.843 に答える