2010-11-29 11 views
-3

私はしばらくJava(主に)と.Netでコーディングしています。||(または)Javaの論理演算子。

私が見つけたのは、.Netの||論理演算子がJavaの演算子||と異なる点です。

Object obj = null; 

if(obj == null || obj.toString().isEmpty()){ 
    System.out.println("Object is null"); 
} 

コードの結果は、上記のようになります:

は、次のJavaコードを見てみましょ

オブジェクトがnullの

obj == nulltrueであるため、その理由は2番目の式は評価されませんでした。もしそうなら、私はjava.lang.NullPointerExceptionを受け取ったでしょう。

また、私がシングルまたは(|)を使用した場合、私はNullPointerExceptionも受け取りました(どちらも評価されています)。

私の質問は以下の通りです:

コードは、C#だった場合OBJ値がnullであり、第二の式は常に(関係なく、オペレータの)評価されているので、私はいつもObjectReferenceNotSetなど例外が発生しますつまり、結果はJavaではなくC#で異なります。 C#コードを正しく動作させるには、if文を2つ作成する必要があります。

C#でこれをJavaに似た方法がありますか? (表現が2つの場合は1つにしてください)

ありがとうございました。

+1

私は申し訳ありませんが、あなたをdownvoteしなければならなかった:(しかし、あなたの質問は完全に間違っていると、それは、最大多数の票を受けていますなぜ私は理解できない! – fearofawhackplanet

+1

私は同意します。私は別の場所でミスを犯した。私が投票質問を閉じる。私はそれを削除することはできません。 – Koekiebox

+0

これを試したことがありますか? – Pedro

答えて

15

C#の||演算子は、Javaと同様に短絡しています。現在は&&です。 |&演算子は、Javaの場合と同様にではなく、の短絡です。

結果が異なる場合は、コードにバグがあります。問題のC#を教えてもらえますか?

これは正常に動作します:

object obj = null; 

    if(obj == null || string.IsNullOrEmpty(obj.ToString())) { 
     Console.WriteLine("Object is null"); 
    } 
+0

また、これはVB.Netの場合、またはを使用する場合ですか? – Koekiebox

+1

@Koekiebox - いいえ。 VBでは 'OrElse'は短絡しています。 「Or」は**ショートではありません**。 Ditto 'AndAlso'と' And 'と –

0

それは "短絡評価" と呼ばれています。次の声明を評価する必要はありません。これはJavaの優れた機能です。

+5

C#でも同じです。 –

1

この動作は厳しいjava language featureです:実行時に

、左-handオペランド 式が最初に評価されます[...]結果の値が の場合、条件付きの値または の式は真で、右側の オペランド式は評価されません。 左側のオペランド の値がfalseの場合、右側の 式が評価されます。 [...] 結果の値は、 の条件式または式の値になります。

したがって、|| |と同じ結果を計算します。ブールオペランドまたはブールオペランドの場合は です。それ は右側 オペランド式が 条件付きではなく、常に

同様のルールがjava conditional-and operator用に定義されていると評価された点のみが異なります。 C#に

比較(同一):&&||オペレータが 条件付き論理演算子と呼ばれ

。 "短絡"論理演算子とも呼ばれます。

条件アンド発現

  • 包括-または発現
  • 条件アンド発現& &包括-または発現

条件 - または - 式:

  • 条件アンド発現
  • 条件付きまたは式||条件アンド発現

&&||演算子は、条件付きバージョン&|オペレータの ある:そのyが 評価される以外は、

  • x && yが 操作x & yに対応する操作xfalseでない場合に限ります。そのyが がxが真でない場合にのみ評価される以外
  • 操作x || yは、 操作x | yに相当します。
+0

(類似性を示すためにC#バージョンにも追加) –

+0

@Marc - 素晴らしい!ありがとう! –