Оператор == и сравнение

79
18 июня 2021, 21:50

Переменные примитивных типов состоят из битов и представляют свои значения, ссылочные переменные содержат биты, которые описывают способ получения объекта. Для сравнения двух примитивов применяйте оператор ==

Оператор == может быть использован для сравнения двух переменных любого типа - он просто проверяет на соответствие их биты.

Выражение if (a == b) { ... } смотрит на биты внутри a и b и возвращает true, если они совпадают.

int a = 3;
byte b = 3;
if (a == b ) {...}

Но как проверяет на соответствие их биты. Если int 32 бита, а byte 8 бит? В данном примере a не должно было быть равно b потому что int и byte имеют разные биты

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

Answer 1

Если я ничего не путаю, то при сравнении выполняется автоматическое приведение типов, то есть если это возможно то , обе переменные будут приведены к общему типу данных: например если есть byte b = 8 и int i = 10, то при их сравнении b==i будет автоматически произведено что-то вроде:

(int) b == i

Числа вообще хранятся в виде единичек и ноликов, то есть при преобразовании int i 257(000000...100000001) в byte i просто обрежутся все лишние байты слева и переменная i будет равна не 256(111111111), а (000000001)

Т.е. касательно вашего вопроса просто автоматически добавятся нулевые биты для переменной типа byte

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

  1. https://metanit.com/java/tutorial/2.2.php

  2. Перевод int в byte?

READ ALSO
Post запрос с исключенными полями XML

Post запрос с исключенными полями XML

Такая проблемаУ меня на пост запрос приходит String с xml

81
javascript var/let

javascript var/let

я недавно начал изучать джси вот возник такой вопрос

119
Вывод значения при создании класса в JS [дубликат]

Вывод значения при создании класса в JS [дубликат]

столкнулся с задачей и никак не могу сообразить как правильно реализовать класс

98
Добавление метода к переменной с помощью записи «через точку» создает в обьекте новое свойство?

Добавление метода к переменной с помощью записи «через точку» создает в обьекте новое свойство?

Насколько я понял запись через точку означает, что к объекту добавляем какое-то свойство с определенным значением:

86