Συνιστάται, 2024

Επιλογή Συντάκτη

Διαφορά μεταξύ της κλάσης και της κλάσης StringBuffer στην Java

Το String και το StringBuffer είναι οι κλάσεις που λειτουργούν σε χορδές. Η κλάση StringBuffer είναι η κλάση ομότιμης κατηγορίας της κλάσης. Το αντικείμενο της κλάσης String είναι σταθερού μήκους. Το αντικείμενο της κλάσης StringBuffer μπορεί να αναπτυχθεί. Η βασική διαφορά μεταξύ του String και του StringBuffer είναι ότι το αντικείμενο της κλάσης "String" είναι αμετάβλητο . Το αντικείμενο της κατηγορίας "StringBuffer" μπορεί να μεταβληθεί .

Συγκριτικό διάγραμμα

Βάση σύγκρισηςΣειράStringBuffer
ΒασικόςΤο μήκος του αντικειμένου String είναι σταθερό.Το μήκος του StringBuffer μπορεί να αυξηθεί.
ΤροποποίησηΤο αντικείμενο συμβολοσειράς είναι αμετάβλητο.Το αντικείμενο StringBuffer είναι μεταβλητό.
ΕκτέλεσηΕίναι πιο αργή κατά τη διάρκεια της σύζευξης.Είναι ταχύτερη κατά τη διάρκεια της συνένωσης.
ΜνήμηΚαταναλώνει περισσότερη μνήμη.Καταναλώνει λιγότερη μνήμη.
ΑποθήκευσηΣυνεχής σειρά συμβολοσειρών.Μνήμη κελιών.

Ορισμός της συμβολοσειράς

"String" είναι μια κλάση στην Java. Το αντικείμενο της κλάσης String είναι σταθερού μήκους και πιο σημαντικό να θυμόμαστε ότι το αντικείμενο της κλάσης String είναι "αμετάβλητο". Μόλις αρχίσετε το αντικείμενο String, δεν μπορείτε να τροποποιήσετε ξανά αυτό το αντικείμενο. Το αντικείμενο της κλάσης String αποθηκεύεται σε συνεχή σειρά String.

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

 System.out.println ("Γεια σας, αυτή είναι η λύση Teckpix"); 

Στην παραπάνω δήλωση, η συμβολοσειρά "Hello this is Teckpix Solution" είναι μια σταθερά String.

Τώρα ας καταλάβουμε τη μεταβλητότητα του αντικειμένου String με τη βοήθεια ενός παραδείγματος.

 String str = νέα σειρά ("Teckpix"); str.concat ("Λύση"); system.out.println (str); // εξόδου Teckpix 

Στον παραπάνω κώδικα, προσπάθησα να συνενώσω τις δύο συμβολοσειρές "Teckpix" και "Λύση". Όπως γνωρίζουμε κάθε φορά που δημιουργείται μια συμβολοσειρά, αυτό σημαίνει ότι δημιουργείται το αντικείμενο τύπου String. Επομένως, η συμβολοσειρά "Teckpix" δημιουργεί ένα αντικείμενο, του οποίου η αναφορά έχει εκχωρηθεί στο αντικείμενο συμβολοσειράς "str". Στη συνέχεια, προσπάθησα να συνενώσω μια άλλη συμβολοσειρά "Λύση" με τη συμβολοσειρά "Teckpix" χρησιμοποιώντας τη μέθοδο "concat ()" της κλάσης String.

Καθώς τα αντικείμενα String είναι αμετάβλητα, δεν γίνεται καμία τροποποίηση στη συμβολοσειρά "Teckpix" και η νέα συμβολοσειρά "Solution" δημιουργεί ένα άλλο αντικείμενο στο string constant pool. Όμως, η αναφορά στο αντικείμενο "Λύση" δεν έχει αλιευθεί από κανένα αντικείμενο, επομένως η αναφορά στο αντικείμενο Λύση έχει χαθεί αν και εξακολουθεί να υπάρχει στο συνεχές pool string. Καθώς δεν γίνεται καμία τροποποίηση στο αντικείμενο Teckpix, όταν εκτυπώσω το str str, στο οποίο ανέθεσα προηγουμένως την αναφορά του Teckpix, θα εκτυπωθεί μόνο η συμβολοσειρά "Teckpix".

Ορισμός του StringBuffer

Η κλάση "StringBuffer" είναι η κλάση "peer" της κλάσης "String". Η κλάση StringBuffer παρέχει περισσότερη λειτουργικότητα στις χορδές. Το αντικείμενο της κλάσης StringBuffer είναι μεταβλητό, το αντικείμενο του οποίου μπορεί να τροποποιηθεί. Το μήκος του αντικειμένου StringBuffer μπορεί να αναπτυχθεί. Μπορείτε να εισαγάγετε τους χαρακτήρες ή τα υποστοιχεία στη μέση της γραμμικής συμβολοσειράς που έχει αντιστοιχιστεί στο αντικείμενο StringBuffer ή στο τέλος του. Το StringBuffer διαθέτει χώρο για 16 επιπλέον χαρακτήρες όταν δεν απαιτείται συγκεκριμένο μήκος.

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

 StringBuffre Sb = νέος StringBuffer ("Teckpix"); Sb.append ("Λύση"). system.out.println (Sb). // Λύση Teckpix εξόδου 

Όπως γνωρίζουμε ότι το αντικείμενο StringBuffer είναι μεταβλητό. Η μέθοδος append () τροποποιεί το αντικείμενο StringBuffer Sb στο οποίο αρχικά έχει ανατεθεί η αναφορά του αντικειμένου "Teckpix" νωρίτερα. Η μέθοδος append () προσθέτει τη νέα συμβολοσειρά literal "Λύση", στο τέλος της γραμματοσειράς string "Teckpix". Τώρα, όταν εκτυπώσω το αντικείμενο Sb, θα εκτυπώσει το τροποποιημένο αντικείμενο συμβολοσειράς "Λύσεις Teckpix".

Βασική διαφορά μεταξύ του String και του StringBuffer

  1. Το μήκος του αντικειμένου String είναι σταθερό αλλά το μήκος ενός αντικειμένου του StringBuffer μπορεί να αυξηθεί όταν απαιτείται.
  2. Το αντικείμενο στοιχειοσειράς είναι αμετάβλητο, δηλ. Το αντικείμενο δεν μπορεί να ξαναδοθεί ξανά ενώ το αντικείμενο του StringBuffer είναι μεταβλητό.
  3. Το αντικείμενο στοιχειοσειρών είναι πιο αργό στην απόδοση, ενώ το αντικείμενο StringBuffer είναι ταχύτερο.
  4. Το αντικείμενο στοιχειοσειρών καταναλώνει περισσότερη μνήμη ενώ τα αντικείμενα StringBuffer καταναλώνουν λιγότερη μνήμη.
  5. Τα αντικείμενα στοιχειοσειράς αποθηκεύονται σε μια σταθερή ομάδα ενώ τα αντικείμενα StringBuffer αποθηκεύονται στη μνήμη σωρού.

Συμπέρασμα:

Τα αντικείμενα StringBuffer παρέχουν περισσότερη λειτουργικότητα στις συμβολοσειρές σε σύγκριση με την κλάση String. Ως εκ τούτου, είναι προτιμότερο να συνεργαστείτε με το StringBuffer αντί για την κλάση String.

Top