Подтвердить что ты не робот

Проверяет ли == для полного равенства в булевых? - Ява

Итак, я слышал, что если я сравню 2 строки с ==, тогда я вернусь только назад, если они оба относятся к одному и тому же объекту/экземпляру. Это строки. Как насчет булевых?

4b9b3361

Ответ 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 и т.д.

Ответ 2

Если у вас есть значение Использования объекта, когда вы не можете запускать такие вещи. (Кэш VM для примитивов с автобоксированием)

    public static void main(String[] args){
       Boolean a = true;
       Boolean b = true;
       System.out.println(a == b);
       a = new Boolean(true);
       b = new Boolean(true);
       System.out.println(a == b);
   }

выход TRUE и FALSE

Ответ 3

Это зависит, если вы говорите о типах значений, таких как: int, boolean, long или о ссылочных типах: Integer, boolean, long. типы значений можно сравнить с ==, ссылочные типы должны сравниваться с equals.

Ответ 4

При использовании (==) с логическими значениями,

  1. Если один из операндов является булевой оболочкой, то он сначала распаковывается в булев примитив и сравниваются оба.

  2. Если оба являются булевыми обертками, созданными с ключевым словом "new", то их ссылки сравниваются так же, как и в случае других объектов. new Boolean("true") == new Boolean("true") - false

  3. Если оба являются логическими оболочками, созданными без ключевого слова "new",

    Boolean a = false;
    Boolean b = Boolean.FALSE;
    // (a==b) return true