所以我听说如果我将 2 个字符串与 == 进行比较,那么只有当它们都引用同一个对象/实例时,我才会返回 true。那是字符串。布尔值呢?
4 回答
== 检查布尔值是否完全相等?- 爪哇
这取决于您是在谈论Boolean
s (对象包装器,注意大写B
)还是boolean
s (原始,注意小写b
)。如果您在谈论Boolean
s (对象包装器),与所有对象一样,==
检查identity,而不是equivalence。如果您在谈论boolean
s(原语),它会检查等价性。
所以:
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 个字符串与 == 进行比较,那么只有当字符串相同并且它们都引用相同的对象/实例时,我才会返回 true ......
它不是真正的“和”:==
只会检查两个变量是否引用同一个实例。当然,一个实例只能有一组内容,所以如果两个变量都指向同一个实例,那么内容自然是相同的...... :-) 关键是即使它们有不同的实例也会报告相同的字符以相同的顺序。这就是我们使用它们的原因,而不是. 由于ing,字符串可能会有些混乱,这是字符串特有的(没有等效的,尽管当您使用 时,您将获得一个缓存的对象)。另请注意,Java 不像原始字符串那样具有原始字符串String
String
String
==
false
String
equals
==
intern
Boolean
Boolean.valueOf(boolean)
boolean
,int
等。
如果你有一个 Object 使用 equals,如果没有,你可以像这样运行。(用于自动装箱原语的 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
将 ( ==
) 与布尔值一起使用时,
如果其中一个操作数是布尔包装器,则首先将其拆箱为布尔原语,然后将两者进行比较。
如果两者都是布尔包装器,使用 'new' 关键字创建,那么它们的引用就像其他对象的情况一样进行比较。
new Boolean("true") == new Boolean("true")
是假的如果两者都是布尔包装器,创建时没有“新”关键字,
Boolean a = false; Boolean b = Boolean.FALSE; // (a==b) return true
这取决于您是在谈论值类型,例如:,,int
还是引用类型:,,,。值类型可以与 比较,引用类型必须与 比较。boolean
long
Integer
Boolean
Long
==
equals