8 Temmuz 2013, PAZARTESİ
Garip Dize davranış havuzu
Garip bir Dize havuzu davranış, bir sorum var.
==
eşit Dizeleri havuzda onlar olup olmadığını öğrenmek için karşılaştırmak için kullanıyorum.
public class StringPoolTest {
public static void main(String[] args) {
new StringPoolTest().run();
}
String giveLiteralString() {
return "555";
}
void run() {
String s1 = giveLiteralString() "";
System.out.println("555" == "555" "");
System.out.println(giveLiteralString() == giveLiteralString() "");
}
}
Çıktı
true
false
benim için büyük bir sürpriz. Herkes bunu açıklayın lütfen?
Bu konuda bir derleme zamanında gerçekleşiyor sanırım. Ama neden bir dizeye ""
hiç fark etmez ekleme?
CEVAP
8 Temmuz 2013, PAZARTESİ
"555" ""
bir compile-time constant, oysa
giveLiteralString() ""
değil. Bu nedenle eski derler sadece dize sabiti "555" ve gerçek bir yöntem ikincisi derler çağırma ve birleştirme, yeni bir Dize sonuçlanan örneği.
< / ^ hr . Ayrıca JLS §3.10.5 (String Literals) bkz
Çalışma sırasında dizeleri birleştirme tarafından hesaplanan zaman yeni oluşturulan ve bu nedenle farklı.
Bunu Paylaş:
/Apache2 Garip Önbellek Davranış Serse...
Sorular hakkında Java'In Dize hav...
::Garip std göster davranış...
Ruby base64 kodlanmış dize garip \n...
Garip Objective-C Mod Davranış, Negati...