Переменные примитивных типов состоят из битов и представляют свои значения, ссылочные переменные содержат биты, которые описывают способ получения объекта. Для сравнения двух примитивов применяйте оператор ==
Оператор == может быть использован для сравнения двух переменных любого типа - он просто проверяет на соответствие их биты.
Выражение if (a == b) { ... }
смотрит на биты внутри a
и b
и возвращает true
, если они совпадают.
int a = 3;
byte b = 3;
if (a == b ) {...}
Но как проверяет на соответствие их биты. Если int
32 бита, а byte
8 бит? В данном примере a
не должно было быть равно b
потому что int
и byte
имеют разные биты
Проще говоря для примитивов оператор ==
сравнивает их значения это я знаю, но читая в книге про биты вообще ничего не понимаю. Объясните пожалуйста, если возможно визуально, заранее благодарю
Если я ничего не путаю, то при сравнении выполняется автоматическое приведение типов, то есть если это возможно то , обе переменные будут приведены к общему типу данных:
например если есть byte b = 8
и int i = 10
, то при их сравнении b==i
будет автоматически произведено что-то вроде:
(int) b == i
Числа вообще хранятся в виде единичек и ноликов, то есть при преобразовании int i 257(000000...100000001) в byte i просто обрежутся все лишние байты слева и переменная i будет равна не 256(111111111), а (000000001)
Т.е. касательно вашего вопроса просто автоматически добавятся нулевые биты для переменной типа byte
Вообще чтобы понять эту тему вам просто нужно поподробнее почитать про явное и неявное Преобразования базовых типов данных и как оно вообще выполняется, вот пара ссылок:
https://metanit.com/java/tutorial/2.2.php
Перевод int в byte?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
столкнулся с задачей и никак не могу сообразить как правильно реализовать класс
Насколько я понял запись через точку означает, что к объекту добавляем какое-то свойство с определенным значением: