Булевский диапазон в языке программирования Java - PullRequest
3 голосов
/ 03 мая 2011

Я нашел следующий абзац в книге SCJP 6.0. Что означает последнее утверждение. Какую книгу читать о том, как эти переменные на самом деле хранятся в памяти? Большое спасибо.

"Это зависит от виртуальной машины."

Для логических типов нет диапазона; логическое значение может быть только истинным или ложным. Если кто-то спрашивает вас о глубине логического значения, смотрите им прямо в глаза и сказать: «Это зависит от виртуальной машины». Они будут впечатлены.

Ответы [ 3 ]

7 голосов
/ 03 мая 2011

Это означает, что единственное, что требуется от логического значения, - это true или false , независимо от того, что является базовой реализацией.

JLS состояния:

Логический тип имеет ровно два значения: true и false.

Где для целочисленных типов:

Интегралэто типы byte, short, int и long, значения которых составляют 8-разрядные, 16-разрядные, 32-разрядные и 64-разрядные целые числа с двумя дополнениями со знаком соответственно и char, значения которых представляют собой 16-разрядные целые числа без знака, представляющие Unicode.символов.

Таким образом, вам требуется битовая глубина для целочисленных типов, но вам решать, будет ли ваше логическое значение в памяти представлять собой однобитную, байтовую или многобайтовую переменную, когда вы реализуете свою собственнуюJVM.

1 голос
/ 03 мая 2011

Говорят, что виртуальная машина может реализовать логическое значение в виде целого числа, где положительное значение равно true, а 0 или отрицательное значение равно false.Идея состоит в том, что до тех пор, пока виртуальная машина обрабатывает логические значения строго как true или false, не имеет значения, как виртуальная машина реализует логические значения на уровне ОС.

0 голосов
/ 03 мая 2011

Это полностью зависит от виртуальной машины, потому что они ожидают, что вы будете экономно использовать boolean s.Конечно, вы собираетесь использовать их все время, но вряд ли у вас будет больше, чем горстка в данном классе.

У вас определенно не будет что-то вроде boolean[] - онисделал java.util.BitSet для этой цели.Просто имеет больше смысла оставлять boolean в любом желаемом размере (8, 16, 32 бита) и сохранять его простым, чем альтернатива, что по сути будет BitSet внутренним отслеживанием всех логических значений.Это было бы плохое дизайнерское решение, IMO.

...