Какие типы данных существуют в Java?

Ответ

В Java типы данных делятся на две основные категории: примитивные (хранят значение) и ссылочные (хранят адрес объекта).

Примитивные типы (8 видов)

  • Целые числа: byte (8 бит), short (16 бит), int (32 бита), long (64 бита).
  • Числа с плавающей точкой: float (32 бита), double (64 бита).
  • Символьный: char (16 бит, Unicode).
  • Логический: boolean (значение true или false).

Ссылочные типы

  • Классы (например, String, Integer, пользовательские классы).
  • Интерфейсы.
  • Массивы.

Ключевое отличие: Примитивные переменные хранят фактическое значение, а ссылочные — адрес объекта в памяти (heap). При присваивании примитивов копируется значение, а при присваивании ссылок — копируется адрес (обе переменные начинают ссылаться на один объект).

Пример:

int primitiveNum = 42; // Значение 42 хранится прямо в переменной
String referenceStr = "Hello"; // Переменная хранит ссылку на объект String
int[] numbers = {1, 2, 3}; // Ссылочный тип (массив)

Ответ 18+ 🔞

О, блядь, смотри-ка, какие тут у нас в Java типы данных завелись! Две, сука, основные банды: примитивы и ссылочные. Первые — как наличка в кармане, прямо в руках держишь. Вторые — как расписка, что деньги лежат в другом месте, а ты только адресок этой кубышки помнишь.

Примитивные типы (их, блядь, всего 8, запомни)

  • Целые числа: Тут у нас целая иерархия по размеру, от мелкого сора до здорового лома. byte (8 бит, совсем мелочь), short (16 бит, уже лучше), int (32 бита, стандартный работяга), long (64 бита, здоровый, как Герасим из того рассказа).
  • Числа с плавающей точкой: float (32 бита, плавает, но не очень уверенно) и double (64 бита, вот это уже поплавок солидный).
  • Символьный: char (16 бит, хранит одну буковку в Unicode, чтобы китайские иероглифы тоже поместились).
  • Логический: boolean. Тут всё просто, как палка: либо true, либо false. Никаких полутонов, ёпта!

Ссылочные типы

  • Классы всякие (String, Integer, да хоть твой собственный класс SuperPuperCar).
  • Интерфейсы (это как договор, блядь, что класс будет делать).
  • Массивы. Да-да, массив — это тоже ссылочный тип, хоть и выглядит иногда как примитивы в ряд стоят.

А теперь, внимание, ебаный рот, главная разница! Представь, что у тебя есть яблоко (примитив). Ты его кому-то дал — у тебя его больше нет, у него теперь есть. Значение скопировалось. А теперь представь, что у тебя есть записка с адресом квартиры, где стоит холодильник полный пива (ссылочный тип). Ты эту записку скопировал и дал другу. Теперь у вас у обоих одинаковые записки, и вы оба бежите к одному и тому же холодильнику. Изменения через одного касаются всех, потому что пиво-то одно на двоих! Вот в этом, сука, и весь цимес.

Пример, чтобы вообще всё встало на свои места:

int primitiveNum = 42; // Вот оно, значение 42, прямо тут, в переменной. Как яблоко в руке.
String referenceStr = "Hello"; // А тут — только бумажка с адресом, где лежит слово "Hello".
int[] numbers = {1, 2, 3}; // И это тоже ссылочный тип, ёпта! Массив — это объект. Запомни это, как "Муму"!

Вот так вот, блядь. Примитивы — это просто значения, а ссылки — это указатели на общие объекты, с которыми потом можно начудить овердохуища всего.