[解決済み] JavaにおけるCharSequenceとStringの正確な違い [duplicate]
質問
私はこれを読みました
前の記事
. の正確な違いは何ですか?
CharSequence
と文字列の正確な違いは何でしょうか?
String
が実装している
CharSequence
で、その
String
は文字の並びですか?例えば
CharSequence obj = "hello";
String str = "hello";
System.out.println("output is : " + obj + " " + str);
に "hello"を代入するとどうなりますか?
obj
に割り当てられ、さらに
str
?
どのように解決するのですか?
一般的な違い
を実装したクラスがいくつかあります。
CharSequence
インターフェースを実装しているクラスは
String
. これらのうち
-
StringBuilder
変更可能な可変長文字列の場合 -
CharBuffer
変更可能な固定長の低レベル文字列の場合
を受け付けるすべてのメソッドは
CharSequence
を受け付けるメソッドは、これらすべてに対して等しく動作します。を受け取るだけのメソッドは
String
だけを受け付けるメソッドは変換が必要になります。ですから
CharSequence
を引数型として使うのは賢明なことです。しかし
String
を返すのであれば、戻り値の型として
String
を返すのであれば、返される値の変換を避けることができるからです。
String
.
また、マップは
String
ではなく、キータイプとして
CharSequence
ではなく、マップのキーが変更されてはいけないからです。言い換えれば、時々、不変の性質を持つ
String
が不可欠なのです。
具体的なコード・スニペット
貼り付けたコードに関しては、単純にそれをコンパイルし、JVM バイトコードを見るには
javap -v
. そこであなたは、両方の
obj
と
str
は同じ定数オブジェクトへの参照である。として
String
は不変であるため、このような共有はすべて正しいのです。
は
+
の演算子は
String
の呼び出しは、様々な
StringBuilder.append
の呼び出しとしてコンパイルされます。ですから、次のものと同等です。
System.out.println(
(new StringBuilder())
.append("output is : ")
.append((Object)obj)
.append(" ")
.append(str)
.toString()
)
正直なところ、私のコンパイラの
javac 1.6.0_33
をコンパイルします。
+ obj
を使って
StringBuilder.append(Object)
の代わりに
StringBuilder.append(CharSequence)
. 前者はおそらく
toString()
メソッドを呼び出すことになるでしょうが、後者はより効率的な方法で可能なはずです。一方
String.toString()
を単に返すだけでは
String
そのものを返すだけなので、ほとんどペナルティはありません。ですから
StringBuilder.append(String)
の方が1メソッド分くらい効率的かもしれません。
関連
-
git pull appears現在のブランチに対するトラッキング情報がありません。
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] Javaで文字列を分割する方法
-
[解決済み] StringBuilderとStringBufferの違いについて
-
[解決済み] wait()とsleep()の違いについて
-
[解決済み] CharSequence VS String in Java?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
スレッド "main "での例外 java.util.NoSuchElementException in Java 問題解決済み
-
undefined[sonar] sonar:デフォルトのスキャンルール
-
メモ帳でJavaプログラムをコンパイルして実行すると、Could not find or load main class ...というエラーが表示される。解決方法
-
SpringBoot 起動エラー java.nio.charset.MalformedInputException: 入力長 = 2 解決
-
keytool error: java.io.FileNotFoundException: cacerts (アクセス拒否されました。)
-
Junitのユニットテストエラー
-
Javaがエラーで実行される、選択が起動できない、最近起動したものがない
-
ecplise プロンプトが表示されます。"選択したものは起動できません。" "最近の起動はありません。"
-
[解決済み] CharSequence VS String in Java?
-
[解決済み】"text "とnew String("text")の違いは?)