1.文字列のJava組み込みサポート。
いわゆる内蔵サポートは、文字列タイプがCのようなcharポインターを使用して実装されていないことを意味し、Javaの文字列エンコードはUnicodeエンコード標準に準拠しています。 C言語とUnicode標準と互換性があります。 Javaは、文字列クラスを介して内部的に文字列タイプをサポートしています。
これは、文字列オブジェクトと同じ方法を直接呼び出すことができます。
//「ABC」で文字列オブジェクトのすべてのメソッドを直接呼び出すことができます
int length = "abc" .length();
同様に
文字列ABC = new String( "ABC");
int length = abc.length();
2。Javaの文字列値は一定です(一定)
ここでの意味は、文字列タイプが作成された後、文字列のメソッドを変更することはできませんstring( "def")Java仮想マシンに保存されている一定のプールの「ABC」と「DEF」。
次のコードの「ABC」は一定のプールに保存されるため、変数AとABで指摘されたアドレスは、定数プールの同じ「ABC」です。
コードコピーは次のとおりです。
public class stringtest {
public static void main(string [] args){
文字列a = "abc";
文字列ab = "abc";
文字列ABC = new String( "ABC");
System.out.println(ab == a);
System.out.println(a == abc);
}
}
/*プログラム出力:
* 真実
* 間違い
* */
では、動的に生成され、可変文字列はどのように実装されていますか? Javaは、この要件を達成するために、 "+"+"def"などを使用しますStringBuilderとStringBufferは実装されていますか?文字アレイを介して文字列を保存します。以下は、JDKに付属のソースコードから見つかったスニペットです。
3。文字列の問題のエンコード。
ここで理解する2つの質問:ソースファイルでの文字列エンコードを処理する方法は? Java Virtual Machineでクラスファイルやコード実行にコンパイルするときに、文字列はどのようなエンコードを使用しますか?
最初の問題は、ソースコードでエンコードする文字列がIDEまたはテキストエディターに依存することです。たとえば、次のコードはGBKエンコード形式で編集され、UTF-8およびGBKデコードを使用して開きます
// GBKエンコード形式、GBK形式で開きます
// GBKエンコード形式、UTF-8形式で開く、システムのデフォルトのエンコード形式がこの時点でGBKではない場合、コンピレーション中に「-Encoding GBK」パラメーター値をJavacに追加する必要があります。
では、この種のソースコードをエンコードする問題に対処する方法は?回答は、パラメーターオプションで指定されています。このパラメーターのデフォルト値は、システムのデフォルトエンコードと一致しています。通常、WindowsのデフォルトエンコードはGBKです(この値はSystem.GetProperty( "file.Encoding")を介して取得できます)。 Javac -Encoding UTF- 8コンパイルを使用します。
Java仮想マシンを実行するときにクラスファイルまたはコードにコンパイルするときの文字列のエンコードは次のとおりです。 Java仮想マシンの文字列は、UTF-16エンコードを使用してどのように実装されていますか?これは、コンパイラJavacがソースコードファイルの文字列のエンコードを正しく理解している限り、ランタイムまたはクラスのバイトコードファイルの文字列は、ソースコードのエンコード形式とは無関係であることを意味します。ここでは、これら2つの内部エンコーディングがJavaの内部エンコーディングと同じであり、UTF-16エンコーディングに基づいて、つまり「A」に関係なく実装されています。 '1' Javaの文字または漢字の長さは16ビットです。
さらに、文字列タイプでは、指定された固定文字エンコードを使用して基礎となるバイナリ表現と文字列を変換します。つまり、GBKエンコード、UTF-8エンコード、またはその他のエンコードされたテキストファイルまたはその他の入力ストリームを正しく読み取ることができます。メモリ内の正しい文字列に。
たとえば、文字列クラスには次の方法があります。
public string(byte [] bytes、charset charset)。
Public Byte [] GetBytes(Charset Charset);
次のように注意する必要がある別のメンバー方法があります。
パブリックバイト[] getBytes();この方法で返されるバイト配列に基づく文字セットは、必ずしもUTF-16ではなく、プラットフォームのデフォルトの文字セットを指します。