Χορδές σε Java

Χορδές

Οι χορδές είναι ακολουθίες χαρακτήρων. Στην Java, το a Stringείναι Object. Οι συμβολοσειρές δεν πρέπει να συγχέονται charκαθώς οι χαρακτήρες είναι κυριολεκτικά 1 τιμή και όχι μια ακολουθία χαρακτήρων. Μπορείτε ακόμα να χρησιμοποιήσετε 1 τιμή σε μια συμβολοσειρά, ωστόσο προτιμάτε να χρησιμοποιείτε charόταν ελέγχετε για 1 χαρακτήρα.

String course = "FCC"; System.out.println(course instanceof Object);

Παραγωγή:

true

Μπορείτε να δημιουργήσετε ένα αντικείμενο συμβολοσειράς με τους ακόλουθους τρόπους:

  1. String str = "I am a String"; //as a String literal
  2. String str = "I am a " + "String"; //as a constant expression
  3. String str = new String("I am a String"); //as a String Object using the constructor

Ίσως σκέφτεστε: Ποια είναι η διαφορά μεταξύ των τριών;

Λοιπόν, η χρήση της newλέξης-κλειδιού εγγυάται ότι Stringθα δημιουργηθεί ένα νέο αντικείμενο και θα εκχωρηθεί μια νέα θέση μνήμης στη Heapμνήμη (κάντε κλικ εδώ για να μάθετε περισσότερα). Οι γραμματοσειρές συμβολοσειράς και οι σταθερές εκφράσεις συμβολοσειράς αποθηκεύονται προσωρινά στο χρόνο σύνταξης. Ο μεταγλωττιστής τα τοποθετεί στο String Literal Pool για να αποτρέψει τα διπλά και να βελτιώσει την κατανάλωση μνήμης. Η κατανομή αντικειμένων είναι δαπανηρή και αυτό το τέχνασμα αυξάνει την απόδοση ενώ παράλληλα δημιουργεί Strings Εάν χρησιμοποιήσετε το ίδιο κυριολεκτικό ξανά, το JVM χρησιμοποιεί το ίδιο αντικείμενο. Η χρήση του αγωγού όπως παραπάνω είναι σχεδόν πάντα μια χειρότερη επιλογή.

Σε αυτό το απόσπασμα κώδικα, πόσα αντικείμενα String δημιουργούνται;

String str = "This is a string"; String str2 = "This is a string"; String str3 = new String("This is a string");

Η απάντηση είναι: 2 αντικείμενα συμβολοσειράς δημιουργούνται. strκαι οι str2δύο αναφέρονται στο ίδιο αντικείμενο. str3έχει το ίδιο περιεχόμενο, αλλά η χρήση newαναγκών δημιουργεί ένα νέο, ξεχωριστό, αντικείμενο.

Όταν δημιουργείτε μια γραμματοσειρά String, το JVM ελέγχει εσωτερικά, αυτό που είναι γνωστό ως String pool, για να δει αν μπορεί να βρει ένα παρόμοιο (με γνώμονα το περιεχόμενο) αντικείμενο String. Εάν το βρει, επιστρέφει την ίδια αναφορά. Διαφορετικά, απλώς προχωράει και δημιουργεί ένα νέο αντικείμενο String στην πισίνα έτσι ώστε να μπορεί να πραγματοποιηθεί ο ίδιος έλεγχος στο μέλλον.

Μπορείτε να το δοκιμάσετε χρησιμοποιώντας το χελιδόνι, τη γρήγορη σύγκριση αντικειμένων ==και το υλοποιημένο equals().

System.out.println(str == str2); // This prints 'true' System.out.println(str == str3); // This prints 'false' System.out.println(str.equals(str3)); // This prints 'true'

Ακολουθεί ένα άλλο παράδειγμα για το πώς να δημιουργήσετε μια συμβολοσειρά στην Java χρησιμοποιώντας τις διαφορετικές μεθόδους:

public class StringExample{ public static void main(String args[]) { String s1 = "java"; // creating string by Java string literal char ch[] = {'s','t','r','i','n','g','s'}; String s2 = new String(ch); // converting char array to string String s3 = new String("example"); // creating Java string by new keyword System.out.println(s1); System.out.println(s2); System.out.println(s3); } }

Σύγκριση συμβολοσειρών

Εάν θέλετε να συγκρίνετε την τιμή δύο μεταβλητών συμβολοσειράς, δεν μπορείτε να χρησιμοποιήσετε ==. Αυτό οφείλεται στο γεγονός ότι αυτό θα συγκρίνει τις αναφορές των μεταβλητών και όχι τις τιμές που συνδέονται με αυτές. Για να συγκρίνετε τις αποθηκευμένες τιμές των συμβολοσειρών που χρησιμοποιείτε η μέθοδος ισούται με.

boolean equals(Object obj)

Επιστρέφει αλήθεια εάν δύο αντικείμενα είναι ίδια και ψευδώς διαφορετικά.

String str = "Hello world"; String str2 = "Hello world"; System.out.println(str == str2); // This prints false System.out.println(str.equals(str2); // This prints true

Η πρώτη σύγκριση είναι λανθασμένη επειδή "==" εξετάζει τις αναφορές και δεν είναι οι ίδιες.

Η δεύτερη σύγκριση ισχύει επειδή οι μεταβλητές αποθηκεύουν τις ίδιες τιμές. Σε αυτήν την περίπτωση «Γεια σου κόσμος».

Έχουμε πολλές ενσωματωμένες μεθόδους στο String. Το παρακάτω είναι ένα παράδειγμα της μεθόδου String Length ().

public class StringDemo { public static void main(String args[]) { String palindrome = "Dot saw I was Tod"; int len = palindrome.length(); System.out.println( "String Length is : " + len ); } }

Αυτό θα έχει ως αποτέλεσμα - String Length is : 17

Η απάντηση είναι: 2 αντικείμενα συμβολοσειράς δημιουργούνται. Σημειώσεις

  1. Οι μέθοδοι συμβολοσειράς χρησιμοποιούν ευρετήρια μηδενικής βάσης, εκτός από το δεύτερο όρισμα του substring().
  2. Η κατηγορία String είναι τελική - οι μέθοδοι δεν μπορούν να παρακαμφθούν.
  3. Όταν το String κυριολεκτικά βρεθεί από το JVM, προστίθεται στο string literal pool.
  4. Η κλάση συμβολοσειράς διαθέτει όνομα μεθόδου length(), ενώ οι πίνακες έχουν μήκος ονομασίας χαρακτηριστικών.
  5. Στην Java, τα αντικείμενα συμβολοσειράς είναι αμετάβλητα. Αμετάβλητο σημαίνει απλώς μη τροποποιήσιμο ή αμετάβλητο. Μόλις δημιουργηθεί ένα αντικείμενο συμβολοσειράς, τα δεδομένα ή η κατάστασή του δεν μπορούν να αλλάξουν αλλά δημιουργείται ένα νέο αντικείμενο συμβολοσειράς.

Μήκος συμβολοσειράς

Το «μήκος» μιας συμβολοσειράς είναι ακριβώς ο αριθμός των χαρακτήρων σε αυτό. Έτσι, το "γεια" είναι το μήκος 2 και το "γεια" είναι το μήκος 5. Η μέθοδος length () σε μια συμβολοσειρά επιστρέφει το μήκος της, ως εξής:

String a = "Hello"; int len = a.length(); // len is 5

Άλλες μέθοδοι σύγκρισης που μπορούν επίσης να χρησιμοποιηθούν στο String είναι:

  1. equalsIgnoreCase (): - συγκρίνει τη συμβολοσειρά χωρίς να λαμβάνει υπόψη την ευαισθησία της υπόθεσης.
String a = "HELLO"; String b = "hello"; System.out.println(a.equalsIgnoreCase(b)); // It will print true
  1. membandingkanTo: - συγκρίνει την τιμή λεξικογραφικά και επιστρέφει έναν ακέραιο.
String a = "Sam"; String b = "Sam"; String c = "Ram"; System.out.println(a.compareTo(b)); // 0 System.out.prinltn(a.compareTo(c)); // 1 since (a>b) System.out.println(c.compareTo(a)); // -1 since (c