Получить доступ

Сколько в Java примитивных типов и что хранит char?

JuniorОсновы языка
Ещё спрашивают так:
  • Какие примитивные типы есть в Java?
  • Сколько байт занимает char?
  • Чем примитив отличается от обёртки?
Коротко

Примитивов восемь: byte, short, int, long, float, double, char, boolean; char — 16-битный беззнаковый, один UTF-16 code unit.

  • Целые 8/16/32/64 бита, float 32, double 64, размер boolean не задан спецификацией
  • Эмодзи и редкие символы — два char (суррогатная пара), length() считает char, а не символы

А ещё Переполнение int не бросает исключение — значение «заворачивается»

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Попробуйте сами

Песочница: == против equals и кэш Integer

Подробно

Примитивы хранят значение напрямую, а не ссылку на объект:

ТипРазмерЧто хранит
byte8 битцелое −128..127
short16 битцелое
int32 битацелое, около ±2,1 млрд
long64 битацелое
float32 битачисло с плавающей точкой
double64 битачисло с плавающей точкой
char16 битбеззнаковый код UTF-16
booleanне заданtrue/false

char — не «символ» в человеческом смысле, а одна кодовая единица UTF-16. Символы вне базовой плоскости Unicode (эмодзи, часть иероглифов) занимают два char — суррогатную пару. Поэтому "😀".length() равно 2; настоящие символы считают через codePointCount.

Ещё о чём спрашивают: у каждого примитива есть обёртка (Integer, Character…) для коллекций и дженериков; целочисленное переполнение не бросает исключение (Integer.MAX_VALUE + 1 даёт Integer.MIN_VALUE) — для контроля есть Math.addExact; деньги не считают во float/double из-за ошибок округления — берут BigDecimal или копейки в long.

Что хотят услышать

  • Все восемь примитивов и их размеры.
  • char как 16-битный UTF-16 code unit и суррогатные пары.
  • Отличие примитивов от обёрток.
  • Переполнение и BigDecimal для денег — плюс.

Частые ошибки

  • Считать char способным вместить любой символ Unicode (вне BMP — суррогатная пара).
  • Называть String примитивом.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓8 примитивов; char — 16-битный беззнаковый тип, один UTF-16 code unit
  • ✗8 примитивов; char хранит любой символ Unicode целиком (32 бита)
  • ✗9 примитивов, включая String для текста
  • ✗7 примитивов; boolean — это int шириной 1 бит

Что спросят дальше

  • Почему length() у строки с эмодзи больше числа видимых символов?
  • Чем char отличается от code point?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем