1. Karşılaştırmalar
Programcıların her zaman farklı değişkenleri birbiriyle karşılaştırması gerekir. Ancak, daha önce de gördüğünüz gibi, her şey o kadar basit değil.
Tamsayıları karşılaştırmak çok kolaydır — sadece kullanırsınız ==
ve işiniz biter. Gerçek sayıları karşılaştırmak için , aralarındaki farkı (veya daha doğrusu farkın mutlak değerini) çok küçük bir sayı ile karşılaştırmanız gerekir.
Dizeleri karşılaştırmak daha da zordur. Her şeyden önce bunun nedeni, dizelerin nesneler olmasıdır. Dahası, programcılar genellikle dize karşılaştırmasının duruma bağlı olarak biraz farklı olmasını isterler.
2. Dizeler hafızada nasıl düzenlenir?
Daha önce gördüğünüz gibi, diziler bellekte tam sayılardan ve gerçek sayılardan farklı şekilde depolanır:
Dizeleri depolamak için iki bellek bloğu kullanılır: bir blok metnin kendisini saklarken (boyutu metnin boyutuna bağlıdır), ikinci blok (4 bayt) birinci bloğun adresini saklar.
Deneyimli bir programcı " String
str
değişken bir nesneye referans depolar String
.
3. Bir dizgeye referans atama
Bu yaklaşımın faydaları, bir dizi değişkenini başka bir dizi değişkenine atamanız gerektiğinde belirginleşir. Örnek:
String text = "This is a very important message";
String message = text;
Ve sonuç olarak belleğin içereceği şey şu:

Bu tür bir atama işleminden sonra, String
nesne olduğu yerde kalır ve yalnızca adresi (nesneye bir referans) değişkene kopyalanır message
.
4. Referanslar ve nesnelerle çalışma
Ancak bir dizeyi büyük harfe (büyük harfler) dönüştürmeye karar verirseniz, Java makinesi her şeyi doğru yapar: sonunda iki String
nesne elde edersiniz ve text
ve message
değişkenleri, her biri kendi nesnesine referanslar depolar.
Örnek:
String text = "This is a very important message";
String message = text.toUpperCase();
Ve sonuç olarak belleğin içereceği şey şu:
toUpperCase()
Lütfen yöntemin çağrıldığı dizeyi değiştirmediğini unutmayın . Bunun yerine, yeni bir dize (yeni nesne) oluşturur ve ona bir başvuru döndürür.
Daha da ilginç bir örneğe ne dersiniz? Diyelim ki bir Scanner
nesneye bir dizge iletmeye karar verdiniz (böylece nesne dizgeden değerleri okur).
Örnek:
String text = "10 20 40 80";
Scanner console = new Scanner(text);
int a = console.nextInt();
int b = console.nextInt();
Scanner
Sınıfın nasıl çalıştığı hakkında buradan daha fazla bilgi edinebilirsiniz .
Hepsi hafızada şu şekilde saklanacak:
Bu durumda, tek bir String
nesne olduğu gibi bellekte kalır - yalnızca ona yapılan referanslar iletilir ve değişkenlerde saklanır.
5. String
Nesnelere yapılan referansları karşılaştırma
Ve son olarak, eğlenceli kısma ulaştık: dizi karşılaştırması.
Dize değişkenlerini karşılaştırmak için kullanabileceğiniz iki işleç vardır: ==
(eşittir) ve !=
(eşit değildir). "Büyüktür", "küçüktür" veya "büyüktür veya eşittir" işleçlerini kullanamazsınız - derleyici buna izin vermez.
Ancak burada ilginç bir nüans var: dize değişkenlerinde gerçekte ne depolanıyor? Bu doğru: nesnelere adresler (referanslar). Ve karşılaştırılacak olan bu adreslerdir:
String text = "Hi";
String message = text;
String s1 = text.toUpperCase();
String s2 = text.toUpperCase();
İşte hafızada olacaklar:
message
ve değişkenleri text
aynı nesneye atıfta bulunur (adresini saklar). Ancak s1
ve s2
değişkenleri, çok benzer ancak farklı olan nesnelere yapılan başvuruları saklar.
Ve koddaki bu 4 değişkeni karşılaştırırsanız, aşağıdaki sonucu elde edersiniz:
kod | Konsol çıkışı |
---|---|
|
|
GO TO FULL VERSION