Зміст курсу
Java Extended
Java Extended
Передача Даних у Java
Як передається інформація в Java?
Ви знаєте з попереднього курсу, що існує два типи пам'яті — стек і купа. Розглянемо, як дані зберігаються в цих двох областях пам'яті:
Main.java
package com.example; public class Main { public static void main(String[] args) { String number = new String("170"); String word = new String("word"); int poolNumber = -4; } }
Ми створили 3 різні змінні. Нижче наведено схему, яка ілюструє, як і де вони будуть зберігатися в пам'яті:
Розгляньмо, що ви спостерігали на діаграмі:
- Ми бачимо поля
String
у стековій пам'яті, які є посиланнями на значення у купі (heap memory). Таким чином, ми не звертаємося до купи безпосередньо щоразу. Замість цього спочатку звертаємося до посилання у стековій пам'яті, що швидше, ніж доступ до купи. Ви вже стикалися з посиланнями на значення під час вивчення теми String Pool; - Ви можете побачити, що
int
не зберігається у heap memory; його значення зберігається безпосередньо у stack memory. Це стосується всіх примітивних типів даних (byte
,short
,int
,long
,float
,double
, таboolean
). Таким чином, примітивні типи даних у Java передаються за значенням. ОднакString
не є примітивним типом даних, тому його значення зберігається у heap memory; - Для кожного нового посилання у heap memory створюється новий об'єкт. Однак, якщо дві змінні одного типу мають однакове значення, вони посилатимуться на один і той самий об'єкт у heap memory;
- Integer Pool — це область у стековій пам'яті, де всі цілі значення у діапазоні від
-128
до127
пов'язані з посиланнями. Ця оптимізація виконується для підвищення продуктивності обробки чисел у Java, оскільки числа в цьому діапазоні використовуються найчастіше. Пам'ятайте, що stack memory працює швидше, ніж heap memory, тому завдяки Integer Pool ми отримуємо швидший відгук; - String Pool — це область у heap memory, де зберігаються ідентичні значення рядків.
Висновок
У Java все передається за значенням. Для об'єктів передається копія посилання, але сам об'єкт у heap залишається незмінним (якщо він є незмінним, наприклад, String
).
Змінні у stack зберігають посилання на об'єкти, що знаходяться у heap. Це стосується всіх типів-посилань, включаючи String
.
1. Що таке Integer Pool у Java?
2. Як передаються дані в Java: за посиланням чи за значенням?
Все було зрозуміло?
Дякуємо за ваш відгук!
Секція 1. Розділ 2