1. Dizeleri karşılaştırma

Her şey yolunda. s1Ancak ve s2dizelerinin aslında aynı olduğunu, yani aynı metni içerdiklerini görebilirsiniz . StringDizeleri karşılaştırırken, programa nesnelerin adreslerine değil içeriklerine bakmasını nasıl söylersiniz ?

Bu konuda bize yardımcı olması için, Java'nın Stringsınıfının yöntemi vardır equals. Aramak şöyle görünür:

string1.equals(string2)
İki diziyi karşılaştırma

Bu yöntem, truedizeler aynıysa ve falseaynı değilse döndürür.

Örnek:

kod Not
String s1 = "Hello";
String s2 = "HELLO";
String s3 = s1.toUpperCase();

System.out.println(s1.equals(s2));
System.out.println(s1.equals(s3));
System.out.println(s2.equals(s3));
// Hello
// HELLO
// HELLO

false // They are different
false // They are different
true // They are the same, even though the addresses are different

Daha fazla örnek:

kod Açıklama
"Hello".equals("HELLO")
false
String s = "Hello";
"Hello".equals(s);
true
String s = "Hel";
"Hello".equals(s + "lo");
true
String s = "H";
(s + "ello").equals(s + "ello");
true


2. Büyük/küçük harf duyarlı olmayan dize karşılaştırması

Son örnekte , karşılaştırmanın . Gerçekten de, dizeler eşit değildir. Ancak..."Hello".equals("HELLO")false

Açıkçası, dizeler eşit değildir. Bununla birlikte, içerikleri aynı harflere sahiptir ve yalnızca harflerin durumuna göre farklılık gösterir. Bunları karşılaştırmanın ve harflerin durumunu göz ardı etmenin bir yolu var mı? Yani, bu verim ?"Hello".equals("HELLO")true

Ve bu sorunun cevabı evet. Java'da türün Stringbaşka bir özel yöntemi vardır: equalsIgnoreCase. Aramak şöyle görünür:

string1.equalsIgnoreCase(string2)

Metodun adı kabaca şu şekilde tercüme edilir: Compare but ignore case . Yöntemin adındaki harfler iki dikey çizgi içerir: ilki küçük harf Lve ikincisi büyük harftir i. Bunun kafanı karıştırmasına izin verme.

Örnek:

kod Not
String s1 = "Hello";
String s2 = "HELLO";
String s3 = s1.toUpperCase();

System.out.println(s1.equalsIgnoreCase(s2));
System.out.println(s1.equalsIgnoreCase(s3));
System.out.println(s2.equalsIgnoreCase(s3));  
// Hello
// HELLO
// HELLO

true
true
true


3. Dizi karşılaştırma örneği

Basit bir örnek verelim: klavyeden iki satır girmeniz ve bunların aynı olup olmadığını belirlemeniz gerektiğini varsayalım. Bu, kodun nasıl görüneceği:

Scanner console = new Scanner(System.in);
String a = console.nextLine();
String b = console.nextLine();
String result = a.equals(b) ? "Same" : "Different";
System.out.println(result);

4. Dize karşılaştırmasında ilginç bir nüans

Farkında olmanız gereken önemli bir nüans var.

Java derleyicisi kodunuzda (özellikle sizin kodunuzda) birden çok aynı dize bulursa , bellekten tasarruf etmek için bunlar için yalnızca tek bir nesne oluşturur.

String text = "This is a very important message";
String message = "This is a very important message";

Ve sonuç olarak belleğin içereceği şey şu:

dizi karşılaştırması

Ve burada karşılaştırırsanız text == message, o zaman elde edersiniz true. Bu yüzden buna şaşırmayın.

Herhangi bir nedenle referansların gerçekten farklı olmasına ihtiyacınız varsa, bunu yazabilirsiniz:

String text = "This is a very important message";
String message = new String ("This is a very important message");

Veya bu:

String text = "This is a very important message";
String message = new String (text);

Her iki durumda da, textve messagedeğişkenleri aynı metni içeren farklı nesnelere işaret eder.