למה מחרוזת היא לא ניתנת לשינוי ב-Java הוא אחת משאלות הראיון הפופולריות. מחרוזת היא אחת מהמחלקות הנפוצות ביותר בכל שפת תכנות. אנו יודעים שמחרוזת היא לא ניתנת לשינוי וסופית ב-Java. מנהל הזמן של Java שומר על בריכת המחרוזות שהופכת אותה למחלקה מיוחדת.
למה מחרוזת היא לא ניתנת לשינוי ב-Java?
בואו נסתכל על חלק מהיתרונות של אי-השינויות במחרוזת, שיעזרו להבין למה מחרוזת היא לא ניתנת לשינוי ב-Java.
- בריכת המחרוזות אפשרית רק מכיוון שמחרוזת אינה ניתנת לשינוי ב-Java. כך מנהל הזמן של Java חוסך המון שטח זיכרון נשמר מכיוון שמשתנים שונים של מחרוזת יכולים להפנות לאותה מחרוזת בבריכה. אם מחרוזת לא הייתה לא ניתנת לשינוי, אזי אינטרנינג של מחרוזת לא היה אפשרי מכיוון שאם כל משתנה היה שינה את הערך, היה התנ reflected במשתנים האחרים גם.
- אם מחרוזת אינה לא לשנות, זה עשוי לגרום לאיום אבטחה חמור ליישום. לדוגמה, שם משתמש וסיסמה של מסד נתונים מועברים כמחרוזת כדי לקבל חיבור למסד נתונים ובתכלית, פרטי המארח והפורט של הפורט נעברים כמחרוזת בתוך פעולות תכנות סוקט. מאחר ומחרוזת היא לא לשנות, לא ניתן לשנות את ערכה. אחרת, האקר יכול לשנות את הערך שאליו נעשה ייחוס ולגרום לבעיות אבטחה ביישום.
- מאחר ומחרוזת היא לא לשנות, היא בטוחה לשימוש ב-רקע מרובה. ייתכן לשתף אינסטנס מחרוזת אחת במספר תהליכים שונים. זה ממנהיג לאחר שלא להשתמש בסנכרון עבור בטיחות תהליך. מחרוזות בטוחות מתמיד לתהליכים.
- מחרוזות משמשות ב-טוען קבצי Java והבלתי שינוי מספק אבטחה שמבטיחה כי המחלקה הנכונה נטענת על ידי טוען המחלקות. לדוגמה, חשוב לחשוב על מקרה שבו אתה מנסה לטעון את מחלקת
java.sql.Connection
, אך הערך שניתן ישתנה למחלקהmyhacked.Connection
שיכולה לבצע פעולות לא רצויות במסד הנתונים שלך. - מאחר ומחרוזת היא לא לשנות, הקוד גישה שלה נשמר בזמן היצירה ואין צורך לחשב אותו שוב. זה עושה אותה למועמדת מצוינת להיות המפתח במפה ועיבודה מהיר יותר מאובגר מאובגרים מפות מפתח אחרות. זה הסיבה שמחרוזת היא המפתח הנפוץ ביותר למפות ה-HashMap.
זה כמה מהסיבות שאני יכול לחשוב עליהן שמראות על יתרונות של ייצוב מחרוזת. זו מאפיין נהדר של כיתת מחרוזת של Java והופך אותה למיוחדת. קרא לפוסט הזה כדי לדעת איך לכתוב את כיתת ה-Immutable שלך.
תוכל לבדוק דוגמאות נוספות של מחרוזות ב-Java במאגר הקוד שלנו ב-מאגר הקוד שלנו ב-GitHub.
Source:
https://www.digitalocean.com/community/tutorials/string-immutable-final-java