SORU
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ş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Android Authority

    Android Auth

    3 NİSAN 2011
  • Garrett Müller

    Garrett Mül

    26 HAZİRAN 2009
  • Hollyscoop

    Hollyscoop

    30 Ocak 2007