0

私はこのif文を持っています

if((check1==null||!check1.isSolid())&&(check2==null)||!check2.isSolid())

check1またはcheck2がnullであるため、nullポインター例外がスローされますが、オブジェクトにアクセスする前にnull条件をチェックしているため、なぜこれを行っているのかわかりません。オブジェクトがnullの場合、JavaはなぜわざわざチェックするのでしょうかisSolid は、すでに true になっているためです。

4

3 に答える 3

5

かっこを台無しにしました。Java はステートメントを次のようにグループ化します。

((check1 == null || !check1.isSolid()) && check2 == null) || !check2.isSolid()

check1が でnullありcheck2、がである場合null、最初のステートメントは に評価されtrueます。check2問題はnull、2 番目のステートメントに移動するときに発生しcheck2.isSolid()ますNullPointerException

括弧を次のように変更します

(check1 == null || !check1.isSolid()) && (check2 == null || !check2.isSolid())
于 2013-03-30T01:13:38.573 に答える
1

これを試して:

boolean check1_result = (check1 == null) ? true : !check1.isSolid();
boolean check2_result = (check2 == null) ? true : !check2.isSolid();

if (check1_result && check2_result)
// do work...
于 2013-03-30T01:20:32.157 に答える
1

括弧を混同しました。試す:

if((check1==null||!check1.isSolid())&&(check2==null||!check2.isSolid()))
于 2013-03-30T01:14:13.833 に答える