1. Pendahuluan
Mengapa perbandingan string penting dalam Java?
Dalam pemrograman Java, string digunakan dalam banyak situasi. Memeriksa nama pengguna, memvalidasi input formulir, dan memverifikasi respons API semuanya memerlukan perbandingan string. Pada titik ini, “cara membandingkan string dengan benar” merupakan hambatan umum bagi pemula. Khususnya, kegagalan memahami perbedaan antara operator == dan metode equals() dapat menyebabkan bug yang tidak terduga.
Bahaya tidak memahami perbedaan antara “==” dan “equals”
Pertimbangkan kode berikut:
String a = "apple";
String b = new String("apple");
System.out.println(a == b); // result: false
System.out.println(a.equals(b)); // result: true
Banyak orang terkejut dengan output ini. Meskipun stringnya identik, == mengembalikan false sementara equals() mengembalikan true. Hal ini terjadi karena Java memperlakukan string sebagai tipe referensi, dan == membandingkan alamat referensi. Memahami cara yang benar untuk membandingkan string secara langsung memengaruhi keandalan dan keterbacaan program Anda. Jika Anda memahaminya dengan baik, Anda dapat mencegah bug sebelum terjadi.
Apa yang akan Anda pelajari dalam artikel ini
Artikel ini menjelaskan perbandingan string Java dari dasar hingga aplikasi praktis. Artikel ini menjawab pertanyaan seperti:
- Apa perbedaan antara
==danequals()? - Bagaimana cara membandingkan string sambil mengabaikan huruf besar/kecil?
- Bagaimana cara membandingkan string secara leksikografis?
- Bagaimana menghindari pengecualian saat membandingkan dengan null?
Melalui contoh dunia nyata, Anda akan memperoleh pemahaman yang kuat tentang praktik perbandingan string yang benar.
2. Dasar-dasar String di Java
String adalah tipe referensi
Dalam Java, tipe String bukan tipe primitif (seperti int atau boolean) melainkan tipe referensi. Variabel String tidak menyimpan karakter sebenarnya melainkan referensi ke objek yang disimpan di memori heap. Misalnya:
String a = "hello";
String b = "hello";
Baik a maupun b dapat merujuk ke literal "hello" yang sama karena mekanisme interning string Java.
Perbedaan antara literal string dan new String()
Java mengoptimalkan literal string yang berulang dengan menggunakan kembali referensi yang sama:
String s1 = "apple";
String s2 = "apple";
System.out.println(s1 == s2); // true (same literal, interned)
Namun, penggunaan new selalu membuat objek baru:
String s3 = new String("apple");
System.out.println(s1 == s3); // false (different references)
System.out.println(s1.equals(s3)); // true (same content)
Dengan demikian, == memeriksa referensi dan equals() memeriksa konten.
String bersifat immutable
Fitur penting lainnya adalah bahwa String bersifat immutable. Setelah dibuat, sebuah string tidak dapat diubah.
String original = "hello";
original = original + " world";
Ini membuat objek String baru alih-alih memodifikasi yang asli.
3. Metode untuk Membandingkan String
Membandingkan referensi dengan ==
== membandingkan referensi objek:
String a = "Java";
String b = new String("Java");
System.out.println(a == b); // false
Ini tidak boleh digunakan untuk perbandingan konten.
Membandingkan konten dengan equals()
equals() adalah cara yang tepat untuk membandingkan konten string:
String a = "Java";
String b = new String("Java");
System.out.println(a.equals(b)); // true
Menghindari NullPointerException
String input = null;
System.out.println(input.equals("test")); // Exception!
Gunakan gaya constant-first:
System.out.println("test".equals(input)); // false, safe
Mengabaikan huruf besar/kecil dengan equalsIgnoreCase()
String a = "Hello";
String b = "hello";
System.out.println(a.equalsIgnoreCase(b)); // true
Perbandingan leksikografis dengan compareTo()
- 0 → sama
- Negatif → pemanggil mendahului
- Positif → pemanggil mengikuti
String a = "apple"; String b = "banana"; System.out.println(a.compareTo(b)); // negative
4. Contoh Praktis
Memeriksa login pengguna
String inputUsername = "Naohiro";
String registeredUsername = "naohiro";
if (registeredUsername.equalsIgnoreCase(inputUsername)) {
System.out.println("Login successful");
} else {
System.out.println("Username does not match");
}
Password harus selalu menggunakan equals() karena sensitivitas huruf diperlukan. 
Validasi input formulir
String selectedOption = request.getParameter("plan");
if ("premium".equals(selectedOption)) {
System.out.println("Premium plan selected.");
} else {
System.out.println("Other plan selected.");
}
Logika percabangan dengan beberapa pemeriksaan string
String cmd = args[0];
if ("start".equals(cmd)) {
startApp();
} else if ("stop".equals(cmd)) {
stopApp();
} else {
System.out.println("Invalid command");
}
switch (cmd) {
case "start":
startApp();
break;
case "stop":
stopApp();
break;
default:
System.out.println("Unknown command");
}
Menangani null dengan aman
String keyword = null;
if ("search".equals(keyword)) {
System.out.println("Searching...");
}
5. Kinerja dan Optimisasi
Biaya perbandingan string
equals() dan compareTo() membandingkan karakter secara internal. Untuk string yang panjang atau perbandingan yang berulang, hal ini dapat memengaruhi kinerja.
Menggunakan String.intern() untuk kinerja
String a = new String("hello").intern();
String b = "hello";
System.out.println(a == b); // true
Gunakan hanya bila diperlukan untuk menghindari tekanan memori.
Dampak kinerja dari equalsIgnoreCase()
String input = userInput.toLowerCase();
if ("admin".equals(input)) {
// fast comparison
}
Menggunakan StringBuilder / StringBuffer
StringBuilder sb = new StringBuilder();
sb.append("user_");
sb.append("123");
String result = sb.toString();
if (result.equals("user_123")) {
// comparison
}
Menggunakan caching atau peta untuk mengurangi perbandingan
Map<String, Runnable> commandMap = new HashMap<>();
commandMap.put("start", () -> startApp());
commandMap.put("stop", () -> stopApp());
Runnable action = commandMap.get(inputCommand);
if (action != null) {
action.run();
}
6. FAQ
Q1. Apa perbedaan antara == dan equals()?
A.
==membandingkan referensiequals()membandingkan isi string
Q2. Mengapa equals() menghasilkan error ketika variabel bernilai null?
String input = null;
input.equals("test"); // Exception
Gunakan perbandingan dengan konstanta di depan:
"test".equals(input);
Q3. Bagaimana cara membandingkan string tanpa memperhatikan huruf besar/kecil?
stringA.equalsIgnoreCase(stringB);
Q4. Bagaimana cara membandingkan urutan alfabet?
a.compareTo(b);
7. Kesimpulan
Memilih metode perbandingan yang tepat dengan benar sangat penting
Karena String adalah tipe referensi, perbandingan yang salah sering menyebabkan perilaku yang tidak terduga. Memahami perbedaan antara == dan equals() sangat penting.
Daftar Periksa
==: membandingkan referensiequals(): membandingkan isiequalsIgnoreCase(): mengabaikan huruf besar/kecilcompareTo(): urutan kamus"constant".equals(variable): aman terhadap null- Gunakan
intern()atau caching untuk perbandingan berat
Pengetahuan praktis dan penting
Perbandingan string muncul dalam pemeriksaan login, validasi, operasi basis data, logika percabangan, dan banyak tugas harian. Mengetahui teknik yang benar membantu menulis kode yang lebih aman dan dapat diandalkan. Gunakan panduan ini sebagai referensi saat bekerja dengan string di Java.

