Ответ 1
Проверяет ли == для полного равенства в булевых? - Java
Это зависит от того, говоришь ли вы о Boolean
(обертка объекта, обратите внимание на капитал B
) или Boolean
(примитив, обратите внимание на нижний регистр B
). Если вы говорите о Boolean
(обертка объекта), как и для всех объектов, ==
проверяет идентификатор, а не эквивалентность. Если вы говорите о Boolean
(примитивах), он проверяет эквивалентность.
Итак:
Boolean a, b;
a = new Boolean(false);
b = new Boolean(false);
System.out.println("a == b? " + (a == b)); // "a == b? false", because they're not the same instance
Но
boolean c, d;
c = false;
d = false;
System.out.println("c == d? " + (c == d)); // "c == d? true", because they're primitives with the same value
Относительно строк:
Я слышал, что если я сравню 2 строки с ==, тогда я вернусь только назад, если строки будут одинаковыми, и оба они относятся к одному и тому же объекту/экземпляру...
Это не действительно "и": ==
будет только проверять, ссылаются ли две переменные String
на один и тот же экземпляр String
. Конечно, один экземпляр String
может иметь только один набор содержимого, поэтому, если обе переменные указывают на один и тот же экземпляр, естественно, содержимое одного и того же...:-) Ключевым моментом является то, что ==
сообщит false
для разных экземпляров String
, даже если они имеют одинаковые символы в том же порядке. Поэтому мы используем equals
для них, а не ==
. Строки могут немного запутываться из-за intern
ing, который специфичен для строк (нет эквивалента для Boolean
, хотя, когда вы используете Boolean.valueOf(boolean)
, вы получите кешированный объект). Также обратите внимание, что Java не имеет примитивных строк, например примитивных Boolean
, int
и т.д.