logo

Змінні та незмінні в Java

Java - це об'єктно-орієнтована мова програмування. Оскільки це об’єктно-орієнтована мова програмування, усі її методи та механізми обертаються навколо об’єктів. Одне об’єктне поняття є змінним і незмінний у Java . Об’єкти в Java є змінними або незмінними; це залежить від того, як об'єкт можна повторити.

У цьому розділі ми обговоримо змінні та незмінні об’єкти в Java. Далі ми побачимо різницю між ними.

Що таке змінні об'єкти

Змінні об'єкти - це об'єкти, значення яких можна змінити після ініціалізації. Ми можемо змінити значення об’єкта, такі як поля та стани, після того, як об’єкт буде створено. Наприклад, java.util.Date , StringBuilder , StringBuffer і т.д.

Коли ми вносимо зміни в існуючі змінні об’єкти, новий об’єкт не буде створено; натомість це змінить значення існуючого об’єкта. Ці класи об’єкта надають методи для внесення в нього змін.

Геттери та сетери (методи get() і set() доступні в змінних об’єктах. Об’єкт Mutable може бути або не бути потокобезпечним.

програма на java

Що таке незмінні об'єкти

Незмінні об'єкти - це об'єкти, значення яких не можна змінити після ініціалізації. Після створення об’єкта ми не можемо нічого змінити. Наприклад, примітивні предмети наприклад int , довго , плавати , подвійний , всі застарілі класи, Клас обгортки , Клас рядка і т.д.

У двох словах, незмінний означає незмінний або незмінний. Після створення незмінних об’єктів їх значення та стан об’єктів не можна змінити.

Для незмінних об’єктів доступні лише геттери (метод get()), а не сеттери (метод set().

Давайте подивимося, як створювати класи для змінних і незмінних об’єктів.

Як створити змінний клас

Наступні дві речі необхідні для створення змінного класу:

  • Методи зміни значень полів
  • Геттери та сетери об'єктів

Розглянемо наведений нижче приклад змінного класу:

перевести рядок до int
 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 :

алгоритми сортування вставками
  • Змінні об’єкти можна змінити на будь-яке значення чи стан без додавання нового об’єкта. У той час як незмінні об’єкти не можуть бути змінені на значення або стан після їх створення. У випадку незмінних об’єктів, коли ми змінюємо стан об’єкта, буде створено новий об’єкт.
  • Змінні об’єкти надають метод зміни вмісту об’єкта. Для порівняння, незмінні об’єкти не надають жодного методу для зміни значень.
  • Змінні об’єкти підтримують і сетери, і геттери. Для порівняння, незмінні об’єкти підтримують лише сетери, а не гетери.
  • Змінні об’єкти можуть бути або не бути потокобезпечними, але незмінні об’єкти є потокобезпечними за замовчуванням.
  • Прикладами змінних класів є StringBuffer, Java.util.Date, StringBuilder тощо. Тоді як незмінними об’єктами є застарілі класи, класи-огортки, клас String тощо.

Розгляньте таблицю нижче:

Змінний Незмінний
Ми можемо змінити значення змінних об’єктів після ініціалізації. Після запуску незмінного об'єкта; Ми не можемо змінити його цінності.
Стан можна змінити. Стан не можна змінити.
У змінних об'єктах нові об'єкти не утворюються. У незмінних об’єктах новий об’єкт утворюється, коли значення об’єкта змінюється.
Він надає методи зміни об'єкта. Він не надає жодного методу для зміни значення об’єкта.
Він підтримує методи get() і set() для роботи з об’єктом. Він підтримує лише метод get() для передачі значення об’єкта.
Змінні класи можуть бути або не бути потокобезпечними. Незмінні класи є потокобезпечними.
Основними для створення змінного класу є методи для модифікації полів, геттерів і сеттерів. Основними для створення незмінного класу є кінцевий клас, приватні поля, кінцеві змінні об’єкти.

Чому рядки в Java є незмінними

Рядок у Java є дуже особливим класом, оскільки він використовується майже в кожній програмі Java. Ось чому це Immutable для підвищення продуктивності та безпеки. Розберемося докладніше:

У Java рядки використовують концепцію літералів. Припустимо, у нас є об’єкт, що має багато посилальних змінних. У такому випадку, якщо ми змінимо значення посилальної змінної, це вплине на весь об’єкт і всі його значення.

список методів java

Крім наведених вище причин, наступні причини також відповідають за те, що рядок стає незмінним:

Незмінні об'єкти дуже прості; немає потреби в синхронізації та за своєю суттю потокобезпечні. Але незмінні об’єкти є хорошими будівельними блоками для інших об’єктів, тому ми повинні приділяти їм особливу увагу.

Більшість розробників роблять String остаточним об’єктом, щоб його не можна було змінити пізніше.

Висновок

Ми обговорювали змінні та незмінні об’єкти в Java, тепер у нас є чітке розуміння як змінних, так і незмінних об’єктів і класів. Далі ми побачили, як створити змінний і незмінний клас.

Слід зазначити, що незмінні об’єкти можуть бути змінені на їх значення та стан після ініціювання та можуть бути або не бути потокобезпечними. Для порівняння, незмінні об’єкти не можуть бути змінені на їхній стан і значення, а також потокобезпечні за замовчуванням.