Kelas string
Kelas iki nggambarake urutan karakter. Kabeh literal string sing ditetepake ing program, kayata "Iki String" minangka conto saka kelas String. String nduweni rong fitur dhasar:- iki kelas immutable
- iki kelas pungkasan
final
) lan instance saka kelas ora bisa diowahi sawise nggawe ( immutable
). Iki menehi kelas String sawetara kaluwihan penting:
-
Amarga immutability, kode hash saka conto kelas String di-cache. Ora perlu dievaluasi saben wektu amarga nilai lapangan obyek ora bakal owah sawise digawe. Iki menehi kinerja dhuwur nalika nggunakake kelas iki minangka tombol kanggo
HashMap
. -
Kelas String bisa digunakake ing lingkungan multi-threaded tanpa sinkronisasi tambahan.
-
Fitur liyane saka kelas String yaiku kakehan
+
operator " " ing Jawa. Mulane, concatenation (tambahan) strings cukup prasaja:
public static void main(String[] args) {
String command = "Follow" + " " + "the" + " " + "white" + " " + "rabbit";
System.out.println(command); // Follow the white rabbit
}
Ing hood, concatenation string dileksanakake dening StringBuilder utawa StringBuffer kelas (ing discretion saka compiler) lan cara append
(kita bakal pirembagan bab kelas iki sethitik mengko). Yen kita nambah conto kelas String karo conto kelas liyane, sing terakhir bakal dikurangi dadi perwakilan string:
public static void main(String[] args) {
Boolean b = Boolean.TRUE;
String result = "b is " + b;
System.out.println(result); //b is true
}
Iki properti menarik liyane saka kelas String: obyek saka sembarang kelas bisa matak kanggo perwakilan senar nggunakake cara toString()
ditetepake ing kelas Object
lan dipun warisaken dening kabeh kelas liyane. Asring metode toString () ing obyek diarani implisit. Contone, nalika kita nampilake soko ing layar utawa nambah String kanggo obyek saka kelas liyane. Kelas String nduweni siji fitur liyane. Kabeh literal string sing ditetepake ing kode Jawa, kayata "asdf", di-cache ing wektu kompilasi lan ditambahake menyang kolam string sing disebut. Yen kita mbukak kode ing ngisor iki:
String a = "Wake up, Neo";
String b = "Wake up, Neo";
System.out.println(a == b);
Kita bakal weruh bener ing console amarga variabel a
bener bakal b
nuduhake conto sing padha saka kelas String sing ditambahake menyang blumbang senar ing wektu kompilasi. Sing, kedadean beda saka kelas karo Nilai padha ora digawe, lan memori disimpen.
Cacat:
Ora angel ditebak yen kelas String dibutuhake utamane kanggo nggarap senar. Nanging ing sawetara kasus, fitur ing ndhuwur kelas String bisa nguripake saka kaluwihan menyang cacat. Sawise string digawe ing kode Jawa, akeh operasi sing asring ditindakake:- Ngonversi strings kanggo macem-macem register;
- ekstraksi substring;
- concatenation;
- lsp.
public static void main(String[] args) {
String s = " Wake up, Neo! ";
s = s.toUpperCase();
s = s.trim();
System.out.println("\"" + s + "\"");
}
Sepisanan, kayane kita mung nerjemahake baris "Wake up, Neo!" kanggo huruf gedhe, dibusak spasi ekstra saka senar iki lan kebungkus ing kuotasi. Nyatane, amarga immutability saka kelas String, minangka asil saka saben operasi, kedadean string anyar digawe lan lawas dibuwak, ngasilaken akeh sampah. Kepiye cara supaya ora mbuwang memori?
Kelas StringBuffer
Kanggo nangani nggawe sampah sauntara amarga modifikasi obyek String, sampeyan bisa nggunakake kelas StringBuffer. Ikimutable
kelas, i.e. bisa diganti. Obyek saka kelas StringBuffer bisa ngemot set karakter tartamtu, dawa lan nilai sing bisa diganti kanthi nelpon cara tartamtu. Ayo ndeleng kepiye kelas iki. Kanggo nggawe obyek anyar, gunakake salah sawijining konstruktor, contone:
- StringBuffer () - bakal nggawe obyek kosong (ora ana karakter).
- StringBuffer(String str) - bakal nggawe obyek adhedhasar variabel str (ngemot kabeh karakter str ing urutan sing padha)
StringBuffer sb = new StringBuffer();
StringBuffer sb2 = new StringBuffer("Not empty");
Concatenation string liwat StringBuffer ing Jawa wis rampung nggunakake append
. Umumé, metode append
ing kelas StringBuffer kakehan kanthi cara sing bisa nampa meh kabeh jinis data:
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
sb.append(new Integer(2));
sb.append("; ");
sb.append(false);
sb.append("; ");
sb.append(Arrays.asList(1,2,3));
sb.append("; ");
System.out.println(sb); // 2; false; [1, 2, 3];
}
Cara kasebut append
ngasilake obyek sing diarani (kaya akeh metode liyane), sing ngidini kasebut diarani "rantai". Tuladha ing ndhuwur bisa ditulis kaya mangkene:
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
sb.append(new Integer(2))
.append("; ")
.append(false)
.append("; ")
.append(Arrays.asList(1,2,3))
.append("; ");
System.out.println(sb); // 2; false; [1, 2, 3];
}
Kelas StringBuffer nduweni sawetara cara kanggo nggarap senar. Ayo dhaptar sing utama:
delete(int start, int end)
— mbusak substring karakter wiwit saka posisistart
, pungkasanend
deleteCharAt(int index)
- mbusak karakter ing posisiindex
insert(int offset, String str)
- nglebokake barisstr
ing posisioffset
. Cara kasebutinsert
uga kakehan lan bisa njupuk argumen sing bedareplace(int start, int end, String str)
- bakal ngganti kabeh karakter saka posisistart
kanggo posisiend
deningstr
reverse()
- mbalikke urutan kabeh karaktersubstring(int start, int end)
- bakal ngasilake substring wiwit saka posisistart
menyang posisiend
substring(int start)
- bakal ngasilake substring sing diwiwiti ing posisi
start
public static void main(String[] args) {
String numbers = "0123456789";
StringBuffer sb = new StringBuffer(numbers);
System.out.println(sb.substring(3)); // 3456789
System.out.println(sb.substring(4, 8)); // 4567
System.out.println(sb.replace(3, 5, "ABCDE")); // 012ABCDE56789
sb = new StringBuffer(numbers);
System.out.println(sb.reverse()); // 9876543210
sb.reverse(); // Return the original order
sb = new StringBuffer(numbers);
System.out.println(sb.delete(5, 9)); // 012349
System.out.println(sb.deleteCharAt(1)); // 02349
System.out.println(sb.insert(1, "One")); // 0One2349
}
Kaluwihan:
-
Kaya sing wis kasebut, StringBuffer minangka kelas sing bisa diowahi, mula nggarap ora nggawe sampah memori sing padha karo String. Mulane, yen akeh modifikasi ditindakake ing senar, luwih becik nggunakake
StringBuffer
. -
StringBuffer minangka kelas aman thread. Cara kasebut disinkronake lan conto bisa digunakake dening pirang-pirang benang bebarengan.
Cacat:
Ing tangan siji, safety thread kauntungan saka kelas, lan ing tangan liyane, iku kerugian. Cara sing disinkronake luwih alon tinimbang metode sing ora disinkronake. Iki ngendi StringBuilder main. Ayo ngerteni apa jenis kelas Jawa iku - StringBuilder, cara apa lan fitur apa.Kelas StringBuilder
StringBuilder ing Jawa minangka kelas sing nggambarake urutan karakter. Iku meh padha karo StringBuffer ing kabeh cara kajaba safety thread. StringBuilder nyedhiyakake API sing padha karo StringBuffer. Ayo nduduhake iki nggunakake conto sing wis dikenal, ngganti deklarasi variabel saka StringBufer menyang StringBuilder:public static void main(String[] args) {
String numbers = "0123456789";
StringBuilder sb = new StringBuilder(numbers);
System.out.println(sb.substring(3)); //3456789
System.out.println(sb.substring(4, 8)); //4567
System.out.println(sb.replace(3, 5, "ABCDE")); //012ABCDE56789
sb = new StringBuilder(numbers);
System.out.println(sb.reverse()); //9876543210
sb.reverse(); // Return the original order
sb = new StringBuilder(numbers);
System.out.println(sb.delete(5, 9)); //012349
System.out.println(sb.deleteCharAt(1)); //02349
System.out.println(sb.insert(1, "One")); //0One2349
}
Bentenipun mung StringBuffer punika thread aman lan kabeh cara sing diselarasake, nalika StringBuilder ora. Iki mung fitur. StringBuilder ing Jawa luwih cepet tinimbang StringBuffer amarga metode non-sinkronisasi. Mulane, ing sawetara kasus, kajaba ing lingkungan multi-threaded, iku luwih apik kanggo nggunakake StringBuilder kanggo program Java. Kita ngringkes kabeh ing tabel komparatif saka telung kelas:
String vs StringBuffer vs StringBuilder
String | StringBuffer | StringBuilder | |
---|---|---|---|
Kemampuan ngganti | Immutable (Ora) |
mutable (Ya) |
mutable (Ya) |
Extensibility | final (Ora) |
final (Ora) |
final (Ora) |
Keamanan thread | Ya, amarga immutability | Ya, amarga sinkronisasi | Ora |
Nalika nggunakake | Nalika nggarap senar sing arang diowahi | Nalika nggarap strings sing bakal kerep diowahi ing lingkungan multi-Utas | Nalika nggarap strings sing bakal kerep diowahi ing lingkungan single-threaded |
GO TO FULL VERSION