Sobes.tech
Junior

Датҳо дар Java чӣ гуна нигоҳ дошта мешаванд?

sobes.tech AI

Ҷавоб аз AI

Данни дар Java по различни начини се съхраняват в паметта:

  • Примитивни типове: Стойностите се съхраняват директно в определено място в паметта (например, стек). Те включват byte, short, int, long, float, double, boolean, char.

    // int - примитивен тип, стойността се съхранява директно
    int age = 30;
    
  • Референтни типове: В паметта се съхранява референция (адрес), която сочи към мястото, където се намира самият обект (в купчината). Те включват класове, интерфейси, масиви.

    // String - референтен тип, data съдържа референция към обект "Hello" в купчината
    String data = "Hello";
    // Обектът CustomObject е създаден в купчината, obj съдържа референция към него
    CustomObject obj = new CustomObject();
    
  • Масиви: Обекти в купчината, съдържащи набор от елементи (или примитивни стойности, или референции към други обекти). Променливата на масива съдържа референция към този обект.

    // Масив от int, в nums се съхранява референция към самия масивен обект в купчината
    int[] numbers = new int[10];
    // Масив от низове, в names се съхранява референция към масив от обекти String
    String[] names = {"Alice", "Bob"};
    
  • Обекти: Създават се в купчината (Heap). Променливата съдържа референция към обекта. Вътре в обекта могат да се съхраняват както примитивни стойности на неговите полета, така и референции към други обекти.

    // Клас Person с полета
    class Person {
        String name; // Референция към обект String
        int age; // Примитивна стойност
    }
    
    // Създаване на обект Person в купчината, person съдържа референция
    Person person = new Person();
    person.name = "Charlie";
    person.age = 25;
    
  • Стриймове: Обекти на класа String, съхраняват се в купчината. Стриймовете са неизменяеми (immutable). Техните стойности често се кешират в String Pool за оптимизация, когато се създават като литерали.

    // Стриймов литерал, може да бъде създаден в String Pool
    String str1 = "Java";
    // Създаване на нов обект String в купчината
    String str2 = new String("Java");
    
  • Колекции (List, Set, Map и др.): Обекти, съхраняващи се в купчината. Съдържат референции към други обекти.

    // ArrayList съхранява референции към добавените обекти String
    List<String> fruits = new ArrayList<>();
    fruits.add("Apple");
    fruits.add("Banana");
    
  • Стек (Stack): Използва се за съхраняване на локални променливи (примитивни типове), референции към обекти и информация за извиквания на методи (call stack). Животът на данните в стека е свързан с извикваната метода.

  • Куча (Heap): Използва се за съхраняване на всички обекти. Почистващият паметта (garbage collector) освобождава паметта.

Така, данните в Java са разпределени между стека (за примитиви и референции) и купчината (за обекти).