ホームページ  >  記事  >  Java  >  JavaでStringクラスを解釈する

JavaでStringクラスを解釈する

PHP中文网
PHP中文网オリジナル
2017-06-22 13:46:121655ブラウズ

String a="aa";

String は基本的なデータ型ではなく、参照型です。上記の単純な文の場合、Java コンパイラーは再コンパイルの段階でそれを決定し、「aa」を挿入します。オブジェクトは次のとおりです。現在のクラス ファイルの定数プール領域に格納されます (ヒープ、具体的には Perm 領域ではないことに注意してください)。たとえば、"XXX".intern( の呼び出しなど) は実行時に拡張することもできます。 ) は実行時のクラスの呼び出しです。定数プールにデータを注入すると、java.lang.OutofMemory:PermGen スペース例外が発生する可能性があります。このプロセスでは、まずこの文字列と定数プール内の各文字列が一致するかどうかを比較し、どちらも存在しない場合は、定数値を注入して現在のアドレスを返すことがわかります。 String.intern( ) はあまり効率的ではありません。

private static void test1(){
String a = “a” + “b” +1;
Stirng b = “ab1”;
System.out.println(a==b);
}

明らかに戻り結果はTrueです

「==」について: 基本データ型の場合 ==は、(byte、short、int、float、char、double、long)などの基本データ型の値を比較することです、ブール値)、参照型の場合、比較されるのは 2 つの参照オブジェクトの論理アドレスです

equals と hashcode() について: Object クラスの equals メソッドのデフォルトは、比較される 2 つのオブジェクト参照の論理アドレスです (return (this == obj);) 、equals の設計では、サブクラスが 2 つの同一のサブクラスの比較を単独で実装する必要があります (異なるサブクラスを比較するのは意味がありません。そのため、equals の多くの実装では、最初に 2 つのオブジェクトが属するかどうかを判断します。ここでは、クラス) オブジェクトが等しいかどうかを判断しますが、参照されるアドレスが等しいかどうかは判断しません。 Java のデフォルトのハッシュコード メソッドは、オブジェクトのハッシュ値を提供します。これはネイティブ メソッドです (ネイティブ メソッドの呼び出しコストは依然として非常に高くなります)。通常、その戻り値は System.identifyHashCode(Object) メソッドの戻り値と一致します。ハッシュコード メソッドはオブジェクト ヘッダーの 2 進数の一部であり、オブジェクトを識別するために使用され、ハッシュ アルゴリズムでオブジェクトをハッシュするために使用されます。 String クラスは、対応する String クラスのハッシュコードを生成するために、HashCode メソッドをオーバーライドする必要があります。誰もがオーバーライドされていると思わせるいくつかのクラスの使用。equals() メソッドは hashcode() メソッドをオーバーライドする必要があります。たとえば、HashMap (および HashSet、ただし HashSet は HashMap を使用して実装されます) では、HashMap に要素を配置するプロセスは、最初にキーの hashcode メソッドを呼び出し、このメソッドの戻り値と長さに基づいて Entity インデックスを計算します。 HashMap の Entity 配列の要素が既に存在する場合は、比較のために key の平等メソッドを呼び出します。存在しない場合は、それをリンク リストに挿入します。

コンパイル時の最適化について: コンパイラーにとって、コンパイル時の最適化の原則は、決定できるもの (final など) を最適化し、決定できないものは処理しないことです。 Final 型変数は最適化され、メソッド呼び出しが行われます。 String a="a" + "b" はコンパイル時に a="ab" に最適化され、String a="a" String b=a+"b" は Stringbuffer のスプライシングに最適化されることに注意してください。コンパイル時

以上がJavaでStringクラスを解釈するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。