1

古いコードの変更を確認したところ、非常に興味深い変更がありました。違いがあります:

if(retValue.equals("") || retValue == null){

if(retValue == null || retValue.equals("")){

助言がありますか?jvmとの違いは何ですか?

ありがとう。

4

3 に答える 3

5

もちろん。明確な違いがあります。たとえば、最初の例では、retValue が null の場合に NullPointerException が発生します。

于 2012-07-23T14:02:45.600 に答える
5

||and&&演算子は「怠惰」です。JVM は、結果が確定するとすぐに式の評価を停止します。

  • の場合||、オペランドの 1 つが true になるとすぐに停止します ==> 式全体が true になります。
  • の場合&&、オペランドの 1 つが false ==> 式全体が false になるとすぐに停止します。

JLS #15.24からの引用(強調鉱山):

条件付きOR||演算子は|(§15.22.2)と似ていますが、左側のオペランドの値が false の場合にのみ右側のオペランドを評価します

于 2012-07-23T14:05:26.053 に答える
0

OR は、どちらかのステートメントが true の場合に true を返します。これは、if が最初のステートメントのみをチェックすることを意味します (たとえば、コードの 2 行目)。

retValue == null

最初が true の場合、2 番目はチェックしません。これは、retValue が null の場合、コードの 1 行目は NullPointerException を意味する可能性がありますが、2 行目は同じ入力に対して NullPointerException を持たないことを意味します。

于 2012-07-23T14:05:52.493 に答える