logo

ניתן לשינוי וללא שינוי ב-Java

Java היא שפת תכנות מונחה עצמים. מכיוון שזו שפת תכנות מונחה עצמים, כל השיטות והמנגנון סובב סביב האובייקטים. מושג אחד מבוסס אובייקטים הוא בר שינוי ו בלתי משתנה ב-Java . אובייקטים ב-Java ניתנים לשינוי או בלתי ניתנים לשינוי; זה תלוי איך ניתן לבצע איטרציה על האובייקט.

בחלק זה, נדון באובייקטים הניתנים לשינוי ובלתי ניתנים לשינוי ב-Java. בהמשך, נראה את ההבדל ביניהם.

מהם אובייקטים משתנים

האובייקטים הניתנים לשינוי הם אובייקטים שניתן לשנות את ערכם לאחר האתחול. אנו יכולים לשנות את ערכי האובייקט, כגון שדה ומצבים, לאחר יצירת האובייקט. לדוגמה, java.util.Date , StringBuilder , StringBuffer , וכו.

כאשר ביצענו שינוי באובייקטים קיימים שניתנים לשינוי, לא ייווצר אובייקט חדש; במקום זאת, זה ישנה את הערך של האובייקט הקיים. המחלקות של אובייקטים אלו מספקות שיטות לביצוע שינויים בו.

השיטות Getters ו-Setters (get() ו-set() זמינות באובייקטים הניתנים לשינוי. האובייקט Mutable עשוי להיות בטוח או לא בטוח.

ascii של a ב-java

מהם אובייקטים בלתי ניתנים לשינוי

האובייקטים הבלתי ניתנים לשינוי הם אובייקטים שלא ניתן לשנות את ערכם לאחר האתחול. אנחנו לא יכולים לשנות שום דבר ברגע שהאובייקט נוצר. לדוגמה, חפצים פרימיטיביים כגון int, ארוך , לָצוּף , לְהַכפִּיל , כל שיעורי המסורת, שיעור עטיפה , שיעור מיתר , וכו.

בקצרה, בלתי משתנה פירושו ללא שינוי או בלתי ניתן לשינוי. לאחר יצירת האובייקטים הבלתי ניתנים לשינוי, לא ניתן לשנות את ערכי האובייקט ואת מצבו.

רק Getters (שיטת get() זמינים ולא Setters (שיטת set()) עבור אובייקטים בלתי ניתנים לשינוי.

בואו נראה כיצד ליצור מחלקות עבור אובייקטים הניתנים לשינוי ובלתי ניתנים לשינוי.

כיצד ליצור מחלקה ניתנת לשינוי

שני הדברים הבאים חיוניים ליצירת מחלקה הניתנת לשינוי:

  • שיטות לשינוי ערכי השדות
  • מגבירים ומקבעים של האובייקטים

שקול את הדוגמה הבאה של המחלקה הניתנת לשינוי:

java char למחרוזת
 public class JtpExample { private String s; JtpExample(String s) { this.s = s; } public String getName() { return s; } public void setName(String coursename) { this.s = coursename; } public static void main(String[] args) { JtpExample obj = new JtpExample('JavaTpoint'); System.out.println(obj.getName()); // Here, we can update the name using the setName method. obj.setName('Java Training'); System.out.println(obj.getName()); } } 

תְפוּקָה:

 JavaTpoint Java Training 

מהדוגמה שלמעלה, אנו משנים את ערך השם באמצעות שיטת setName.

כיצד ליצור מחלקה בלתי ניתנת לשינוי

הדברים הבאים חיוניים ליצירת מחלקה בלתי ניתנת לשינוי:

  • שיעור סופי, המוכרז כסופי כך שלא ניתן להאריך אותו.
  • כל השדות צריכים להיות פרטיים כך שהגישה הישירה לשדות תיחסם.
  • אין סטרים
  • כל השדות הניתנים לשינוי צריכים להיות סופיים כך שלא ניתן יהיה לבצע איטרציה לאחר האתחול.

שקול את הדוגמה הבאה:

 public class JtpExample1 { private final String s; JtpExample1(final String s) { this.s = s; } public final String getName() { return s; } public static void main(String[] args) { JtpExample obj = new JtpExample('Core Java Training'); System.out.println(obj.getName()); } } 

תְפוּקָה:

 Core Java Training 

לפיכך, דנו באובייקטים ובמעמדות הניתנים לשינוי ובלתי ניתנים לשינוי. בואו נדון בהבדלים ביניהם:

ההבדל בין אובייקטים ניתנים לשינוי ובלתי ניתנים לשינוי

להלן כמה הבדלים מרכזיים בין אובייקטים הניתנים לשינוי ובלתי ניתנים לשינוי ב Java :

נגזרות חלקיות בלטקס
  • ניתן לשנות את האובייקטים הניתנים לשינוי לכל ערך או מצב מבלי להוסיף אובייקט חדש. בעוד שלא ניתן לשנות את האובייקטים הבלתי ניתנים לשינוי לערכם או למצבם לאחר יצירתם. במקרה של אובייקטים בלתי ניתנים לשינוי, בכל פעם שנשנה את מצב האובייקט, יווצר אובייקט חדש.
  • אובייקטים הניתנים לשינוי מספקים שיטה לשינוי תוכן האובייקט. באופן השוואתי, האובייקטים הבלתי ניתנים לשינוי אינם מספקים שום שיטה לשינוי הערכים.
  • האובייקטים הניתנים לשינוי תומכים ב-settings ו-getters שניהם. באופן השוואתי, האובייקטים הבלתי ניתנים לשינוי תומכים רק ב-setters, לא בגטרים.
  • האובייקטים הניתנים לשינוי יכולים להיות בטוחים לשרשור או לא, אבל האובייקטים הניתנים לשינוי הם בטוחים לשרשור כברירת מחדל.
  • דוגמאות המחלקות הניתנות לשינוי הן StringBuffer, Java.util.Date, StringBuilder וכו'. בעוד שהאובייקטים הניתנים לשינוי הם מחלקות מדור קודם, מחלקות עטיפה, מחלקות String וכו'.

שקול את הטבלה הבאה:

מִשְׁתַנֶה בלתי ניתן לשינוי
אנו יכולים לשנות את הערך של אובייקטים הניתנים לשינוי לאחר האתחול. ברגע שאובייקט בלתי ניתן לשינוי מופעל; אנחנו לא יכולים לשנות את הערכים שלו.
אפשר לשנות את המדינה. אי אפשר לשנות את המדינה.
באובייקטים הניתנים לשינוי, לא נוצרים אובייקטים חדשים. באובייקטים בלתי ניתנים לשינוי, אובייקט חדש נוצר כאשר ערך האובייקט משתנה.
הוא מספק שיטות לשינוי האובייקט. זה לא מספק שום שיטה לשנות את ערך האובייקט.
הוא תומך בשיטות get() ו-set() ל-dela עם האובייקט. זה תומך רק בשיטת get() כדי להעביר את הערך של האובייקט.
מחלקות הניתנות לשינוי עשויות להיות בטוחות לשרשור או לא. מחלקות בלתי ניתנות לשינוי הן בטוחות לשרשור.
המרכיבים החיוניים ליצירת מחלקה ניתנת לשינוי הם שיטות לשינוי שדות, getters ו-seters. היסודות ליצירת מחלקה בלתי ניתנת לשינוי הם מחלקה סופית, שדות פרטיים, אובייקטים סופיים שניתנים לשינוי.

מדוע מחרוזות ב-Java ניתנות לשינוי

מחרוזת ב-Java היא מחלקה מיוחדת מאוד, מכיוון שהיא משמשת כמעט בכל תוכנת Java. לכן זה בלתי ניתן לשינוי כדי לשפר את הביצועים והאבטחה. בואו נבין את זה בפירוט:

ב-Java, מחרוזות משתמשות במושג מילולי. נניח שיש לנו אובייקט בעל משתני התייחסות רבים. בתרחיש כזה, אם נשנה את הערך של משתנה התייחסות, זה ישפיע על האובייקט כולו ועל כל הערכים שלו.

מפתח ייחודי של mysql

מלבד הסיבות לעיל, הסיבות הבאות אחראיות גם להפיכת המחרוזת לבלתי ניתנת לשינוי:

אובייקטים בלתי ניתנים לשינוי הם פשוטים מאוד; אין צורך בסנכרון והם מטבעם בטוחים לשרשור. אבל, אובייקטים בלתי ניתנים לשינוי מהווים אבני בניין טובות עבור אובייקטים אחרים, ולכן עלינו לספק להם טיפול מיוחד.

רוב המפתחים הופכים את המחרוזת לאובייקט הסופי כך שלא ניתן יהיה לשנות אותו מאוחר יותר.

סיכום

דיברנו על אובייקטים הניתנים לשינוי ובלתי ניתנים לשינוי בג'אווה, כעת, יש לנו הבנה ברורה של אובייקטים ומחלקות ניתנים לשינוי ובלתי ניתנים לשינוי. יתר על כן, ראינו כיצד ליצור מחלקה ניתנת לשינוי ובלתי ניתנת לשינוי.

יצוין כי ניתן לשנות אובייקטים בלתי ניתנים לשינוי לערכם ולמצבם לאחר הפעלתם ועשויים להיות בטוחים לשרשור או לא. באופן השוואתי, לא ניתן לשנות את האובייקטים הבלתי ניתנים לשינוי למצבם ולערכם ולבטוח ברירת מחדל.