← Назад к вопросам

Что такое ссылочные типы данных?

1.3 Junior🔥 131 комментариев
#Основы Java

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Ссылочные типы данных в Java

Ссылочные типы данных - это один из двух основных категорий типов в Java (наряду с примитивными). Они представляют ссылки на объекты, хранящиеся в памяти, а не сами значения.

Определение и основные особенности

Ссылочный тип данных хранит адрес (ссылку) в памяти на объект, а не само значение объекта. Когда вы создаёте переменную ссылочного типа, вы создаёте указатель на место в памяти, где находится объект.

String str = new String("Hello");  // str - это ссылка на объект String
Object obj = new Object();          // obj - это ссылка на объект Object
MyClass instance = new MyClass();   // instance - это ссылка на объект MyClass

Категории ссылочных типов

1. Классы Объекты пользовательских классов и встроенных классов Java:

public class Person {
    private String name;
    
    public Person(String name) {
        this.name = name;
    }
}

Person person = new Person("John");  // ссылка на экземпляр Person

2. Интерфейсы Ссылка может быть типом интерфейса, указывая на объект, реализующий этот интерфейс:

interface Animal {
    void makeSound();
}

class Dog implements Animal {
    public void makeSound() {
        System.out.println("Woof");
    }
}

Animal animal = new Dog();  // Ссылка типа Animal на объект Dog

3. Массивы Массивы в Java - это объекты, значит они также являются ссылочными типами:

int[] numbers = new int[5];      // Ссылка на массив примитивов
String[] words = new String[10]; // Ссылка на массив объектов
Object[] objects = new Object[3]; // Ссылка на массив объектов

4. Enum Перечисления - это специальный вид класса и также ссылочный тип:

enum Color {
    RED, GREEN, BLUE
}

Color color = Color.RED;  // Ссылка на элемент enum

Ключевые различия от примитивных типов

Память:

  • Примитивные типы хранят значение в стеке (stack)
  • Ссылочные типы хранят ссылку в стеке, сам объект в куче (heap)
int number = 10;        // значение 10 в стеке
Integer integer = 10;   // ссылка в стеке, объект Integer в куче

Сравнение:

String str1 = new String("Hello");
String str2 = new String("Hello");

str1 == str2;           // false - разные ссылки
str1.equals(str2);      // true - одинаковое содержимое

int a = 5;
int b = 5;
a == b;                 // true - одинаковые значения

Передача в методы: Примитивные типы передаются by value, ссылочные - по ссылке (но сама ссылка копируется):

public void modifyString(String str) {
    str = "New value";  // Изменится локальная ссылка, исходная не изменится
}

String original = "Old";
modifyString(original);
System.out.println(original);  // "Old"

Null значение

Специфичная особенность ссылочных типов - они могут иметь значение null, указывающее на отсутствие объекта:

String str = null;  // Валидно для ссылочных типов
int num = null;     // Ошибка компиляции - примитивный тип не может быть null

Понимание различия между ссылочными и примитивными типами критично для правильной работы с памятью и объектами в Java.