4

私はただ興味があります。具体的な理由があれば教えていただきたいです。

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)
4

6 に答える 6

10

&1,2のように振る舞わない&&

&熱心ビット単位/ブール値の And です。

&&短絡論理積です。


1の行&=は と同等ですがtest = test & (string.length() > 0)、これも失敗します。

2通常、`|` ではなく `||` を使用する理由を参照してください。違いは何ですか? &&-答えは、との使用もカバーしています&

于 2013-03-08T22:39:36.907 に答える
3

var の false 値に関係なく、最初の式が実行されているようです。

これは、2 番目の式が短絡評価を使用しているのに対し、最初の式は使用していないためです。

于 2013-03-08T22:39:41.653 に答える
2

&はビットごとの演算子で&&あり、ブール値の論理演算子であるため、同じではありません。

var &= exprvar = var & exprではなくと同等var = var && exprです。

于 2013-03-08T22:39:21.323 に答える
0

あなたの場合

test = test && (string.length() > 0); // test = false that why strings.length not evaluated

test &= (string.length() > 0); //calling length on null object that why NPE
于 2013-03-08T22:45:17.460 に答える
-1

&ビットごとのAND

&&論理積です。

true && true = true..

&数値で&&動作し、ブール式で動作します。

0xFE & 0xFFになります0xFE

于 2013-03-08T22:40:56.530 に答える
-1
var &= expr

と同等です

var = var & expr

つまり、ビット単位または

var = var && expr

var と expr の論理和を実行します

于 2013-03-08T22:41:16.803 に答える