gpt4 book ai didi

java - "var &= expr"的行为不像 "var = var && expr"

转载 作者:搜寻专家 更新时间:2023-11-01 01:13:30 26 4
gpt4 key购买 nike

我只是好奇。我想知道表达式是否有特定原因

var &= expr

行为方式与

不同
var = var && expr.

看起来第一个表达式中的表达式正在执行,而不管 var 上的 false 值。

我使用的是 Java 6,仅供引用。这段代码:

public class Test
{
protected static String getString()
{
return null;
}

public static void main(String... args)
{
String string = getString();
boolean test = (string != null);
test = test && (string.length() > 0);
System.out.println("First test passed");
test &= (string.length() > 0);
System.out.println("Second test passed");
}
}

给我:

First test passed
Exception in thread "main" java.lang.NullPointerException
at Test.main(Test.java:14)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

最佳答案

& 的行为不像 &&1,2

& 是一个eager 按位/boolean 与。

&&short-circuiting逻辑与。


1 &= 等同于 test = test & (string.length() > 0),这也失败。

2 参见 Why do we usually use `||` not `|`, what is the difference? - 答案还包括 &&& 的使用。

关于java - "var &= expr"的行为不像 "var = var && expr",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15304527/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com