これで検索しましたが、関連するビットを絞り込むにはキーワードがあまりにも一般的でなければなりません。なぜ、アンドロイドで文字列を宣言する方法が両方とも有効で、違いがありますか?文字列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. index.phpを書き直すfoo = bar & bar = foo to index.php?foo = bar&bar = foo
- 3. python argparse store --foo = bar as args.key = 'foo'、args.value = 'bar'
- 4. のTrace.Write(文字列、文字列)とTrace.WriteLine(文字列、文字列)カテゴリ
- 5. 条件付き文字列をPythonのアドバンスト文字列 "foo {}"の形式で追加する方法はありますか?format(bar)?例えば
- 6. 文字列と文字配列のアドバイス
- 7. Javaの文字列と文字配列
- 8. 逆文字列と逆文字列
- 9. 文字列とバイト文字列
- 10. バイナリ文字列、バイト文字列、ユニコード文字列と普通の文字列(str)の違い
- 11. ASP.NET MVCのMocking Controller.Url.Action(文字列、文字列、オブジェクト、文字列)
- 12. Android、構文解析html、文字列の文字列の問題
- 13. は、文字列、文字列配列マップ
- 14. Android文字列:番号を検索して新しい文字列を作成
- 15. http.conf example.com/foo/barをexample.com/foo?id=barにリダイレクト
- 16. [文字列、地図[文字列を、文字列]] jsオブジェクト
- 17. の文字列としての文字
- 18. 文字列の文字列の検索
- 19. 文字列のスカラフィルタ部分文字列
- 20. パスワード文字列への文字列
- 21. パフォーマンスの文字列対文字列
- 22. 文字列内のJavascript文字列
- 23. Javaの:文字列:文字列
- 24. 文字列内の文字列
- 25. 文字列エラーへの文字列
- 26. html文字列の文字列
- 27. 文字列のdjango検索文字列
- 28. 文字列内の部分文字列
- 29. 一文字の文字列
- 30. numpy文字列から文字列へ
それらは同じです。私はこれをチェックアウトすることをお勧めします: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