0
class string1 {
    static public void main(String[] ar) {
        String s1 = "test";
        String s2 = new String();
        if(s2=null) { // line 0
            System.out.println(s1);
            System.out.println(s2.length()); //Line 1
        }
    }
}

私が予想していたのは

a)==を使用していないため、代入操作であるため、s2はnullに設定されます

b) そして、実行時に 1 行目に NPE を取得します。

代わりに、以下に示すように次の出力が得られました。

出力は

if(s2=null)
     ^
  required: boolean
  found:    String
1 error

コンパイルエラーが発生する理由を誰かが説明できますか?

4

6 に答える 6

5

Java は、一部の言語のようにブール値に暗黙的にキャストしません。条件式の内部にブール値として評価される式を配置する必要があります。

if ((s2 = null) != null) { }

もちろん、この状態は意味がありませんが、あなたがやろうとしていることと同じです。割り当てが条件付きで行われることはめったにないことに注意してください。

于 2013-09-01T05:54:18.870 に答える
0

条件はifブール条件のみを評価します。

ここでは、代入演算子はブール値の結果を返しません。

それが例外を取得する理由です。

if ((s2 = null) != null)代わりに使用if(s2=null)すると機能します。

于 2013-09-01T07:45:03.067 に答える
0

Java にはブール値が 2 つしかないという事実に注意する必要があります。これは、 false として使用し、それ以外は true として使用する他の言語truefalseは異なります。0

コンパイルエラーが発生する理由を誰かが説明できますか?

if ステートメントでは、条件は true または false のいずれかであり、比較操作とブール変数によって返されます。

の、

if(s2=null)

これs2=nullはブール値、つまりtrueまたはfalseに評価されないため、コンパイラエラー:

required: boolean
  found:    String
于 2013-09-01T06:13:20.320 に答える