これで検索しましたが、関連するビットを絞り込むにはキーワードがあまりにも一般的でなければなりません。なぜ、アンドロイドで文字列を宣言する方法が両方とも有効で、違いがありますか?文字列foo = "bar"と文字列foo = Androidの新しい文字列( "bar")?
3
A
答えて
3
これはAndroid専用のJava構文です。ここでこれに関する議論があります。 String vs new String()
4
new
キーワードを使用すると、foo = "bar"
を使用する新しい文字列オブジェクトが作成され、アプリ内の別の場所で使用される同じ文字列オブジェクトを指すようになります。 instacneについて
:
String foo = "bar";
String foo2 = "bar";
コンパイラは[foo.equals(foo2)
にconradictionに、foo == foo2
]まったく同じオブジェクトであると、上記のコードを最適化します。
EDIT:いくつかの検索の後、@スルタンが正しいです。これは、依存元の問題をコンパイラではありません、それはspecsである:
文字列リテラルは常にクラス 文字列の同じインスタンス(§4.3.1)を指します。
0
これはAndroidに関するだけでなく、Javaに関するものです。
"xxxx"
と書くと、リテラル文字列になります。これはStringインスタンスです。同じ値を持つすべてのリテラル文字列は同じインスタンスであることに注意してください。詳細は、方法String.intern()
を参照してください。
例:この例では
String s1 = "abc";
String s2 = "abc";
、s1 == s2
は真です。
new String("xxx")
はコピーコンストラクタです。 1つの文字列(リテラル)を取り、そこから新しいインスタンスを作成します。すべての文字列は不変なので、通常これはやりたくないものです。
例:
String s1 = "abc";
String s2 = new String("abc");
s1.equals(s2)
が
s1 == s2
真では偽
0
String x = new String("x")
が効果的に2つの文字列を作成しています。 1つはリテラル(変数名のない式)で、もう1つはxとして保持します。それは同じです:
String x;
{
String a = "x";
x = new String(a);
}
関連する問題
- 1. "if(foo)bar();"の違いと "foo && bar();"
- 2. 削除文字列「foo」と先頭と
- 3. 文字列 "foo bar"の後にすべてを削除する正規表現
- 4. index.phpを書き直すfoo = bar & bar = foo to index.php?foo = bar&bar = foo
- 5. python argparse store --foo = bar as args.key = 'foo'、args.value = 'bar'
- 6. Clojureのfoo、:: foo、:: bar/foo、および:bar/fooの違いは何ですか?
- 7. Pythonの文字列で別の文字列に汎用(foo)文字を使用する
- 8. 条件付き文字列をPythonのアドバンスト文字列 "foo {}"の形式で追加する方法はありますか?format(bar)?例えば
- 9. のTrace.Write(文字列、文字列)とTrace.WriteLine(文字列、文字列)カテゴリ
- 10. if(!isset($ foo)OR(isset($ foo)AND $ foo == $ bar)) `または` if(!isset($ foo)OR $ foo == $ bar) `が良いですか?
- 11. http.conf example.com/foo/barをexample.com/foo?id=barにリダイレクト
- 12. Regex( 'foo' | 'bar')表記
- 13. Foo [T]とBar [T]のマップ
- 14. 文字列の '\'文字を文字列として使用
- 15. 文字列が文字列
- 16. 文字列、文字列
- 17. Javaの文字列と文字配列
- 18. 文字列と文字配列のアドバイス
- 19. 文字列と文字列のアドレスが
- 20. Mustacheの文字列と文字列 - Java
- 21. は、ArrayListの文字列と文字列
- 22. 文字 `*との差str`と`文字列str [] `文字列
- 23. 文字列と2文字
- 24. フィールドタイプ文字列と文字列
- 25. ソル文字列と文字列
- 26. 逆文字列と逆文字列
- 27. 文字列とバイト文字列
- 28. 文字列リテラルと文字列オブジェクト
- 29. FlatmapのScalaの[文字列、文字列、リストの[文字列]]
- 30. バイナリ文字列、バイト文字列、ユニコード文字列と普通の文字列(str)の違い
それらは同じです。私はこれをチェックアウトすることをお勧めします:http://docs.oracle.com/javase/tutorial/java/javaOO/objectcreation.htmlあなたは基本的にStringオブジェクトの新しいインスタンスをインスタンス化しています。 – Robert
文字列は不変なので、違いはないと思います。違いがあるかどうかを調べるために、それぞれが生成したバイトコードを調べることができます。 – Mitch
おそらく[String対新しいString()]のコピーとして閉じられるべきです(http://stackoverflow.com/questions/3052442/what-is-the-difference-between-text-and-new-stringtext-in-java ) – Sulthan