22

private final static Stringメソッドにアクセスするたびに「初期化」する必要があるローカル文字列変数を使用する場合と比較して、Java で使用することによるパフォーマンス上の利点はありますか?

文字列を使用することは、クラスのさまざまな部分で再利用される定数には良い習慣だと思いますprivate static finalが、文字列が 1 つのメソッド、1 つの場所でのみ使用される場合、他のメソッドは関係ないという非常に具体的な理由があります。について、私は実際にはクラスの内部インターフェイスをクリーンに保ち、プライベートメンバーを減らし、ローカル変数のみを使用することを好みます。

Java に文字列のインターンがあり、実際には引用符 ( String s = "some string") を使用して宣言された各文字列の 1 つのコピーを含むプールを保持している場合、メソッドにアクセスするたびに変数を宣言/初期化/割り当てる必要があるため、実際にはパフォーマンスが低下します。 vs静的文字列を使用する?

もう少し明確にするために、またはの使用に違いはありますSSLS?

class c {
private final static String SS = "myString";

  private void method(){
     //do something with SS
  }

  private void OtherMethod(){
     String LS = "myOtherString"
     //do same thing with LS
  }
}
4

2 に答える 2

9

名前付き定数を使用すると、保守性が向上する可能性があります。ただし、コンパイル時に既知の定数はインライン化できますが、その場合、違いはほとんどありません。

注: 文字列リテラルを使用している場合、JVM のどこで使用されても、これは一度だけ作成されます。

この場合、唯一の違いは、インライン化された定数よりも高価になる可能性が低いスタックでローカル変数を使用することです。

メソッドにアクセスするたびに変数を宣言する必要があるため、実際にはパフォーマンスが低下しますか

Java は静的コンパイラを使用するため、変数は、メソッドが呼び出された回数に関係なく、クラス/メソッドをロードするときに 1 回 (またはコンパイルの各段階で 1 回)だけ宣言されます。ただし、変数は毎回初期化される場合があります。

于 2016-03-23T18:20:46.657 に答える
4

真実は、結局のところ、違いはありません。ローカル変数の定数文字列は、引き続き定数プールに入り、最適化されます。したがって、一般的に言えば、ローカル変数の方がアクセスしやすいため高速ですが、定数文字列の場合は違いはありません。したがって、あなたの場合、より読みやすく直感的なものを選択してください。

于 2016-03-23T18:10:47.273 に答える