Какие примитивные типы данных в Java могут хранить отрицательные значения?

«Какие примитивные типы данных в Java могут хранить отрицательные значения?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Java из восьми примитивных типов шесть могут представлять отрицательные числа, а два — не могут.

Типы, хранящие отрицательные значения (знаковые):

Тип Размер Диапазон (включая отрицательные) Пример
byte 8 бит от -128 до 127 byte b = -100;
short 16 бит от -32,768 до 32,767 short s = -30_000;
int 32 бита от -2³¹ до 2³¹-1 int i = -2_147_483_648;
long 64 бита от -2⁶³ до 2⁶³-1 long l = -9_223_372_036_854_775_808L;
float 32 бита ~±1.4E-45 до ~±3.4E+38 float f = -3.14f;
double 64 бита ~±4.9E-324 до ~±1.8E+308 double d = -2.71828;

Типы, НЕ хранящие отрицательные значения:

  1. char (16 бит, беззнаковый): Представляет символы Unicode в диапазоне от 0 до 65,535.
  2. boolean (точный размер не определён): Может содержать только значения true или false.

Ключевое отличие: Типы byte, short, int, long используют дополнительный код (two's complement) для представления отрицательных чисел, что делает арифметические операции эффективными. Типы float и double используют стандарт IEEE 754, где знак хранится в отдельном бите.