0

このアイデアは、次のようにcatch句に複数の例外を追加する可能性を示したEclipse(Java)のために思いつきました。

String someInput;
int int1;

try {
    int1 = Integer.parseInt(someInput);
} catch (NullPointerException | NumberFormatException e) {
    e.printStackTrace;
}

つまり、私はそのようなこともできるということですか?:

boolen bool1 = (int1 == (int2 | int3));

または、このようなオブジェクトをキャストしますか?:

(obj1 | obj2) someObject;

または、常に次のようにオブジェクトを指定しますか?:

obj1 | obj2 someName;

答えてくれてありがとう、アイレン

4

3 に答える 3

5

|例外キャッチ フレーズでの使用は、演算子としてではありません。これは、一連の例外をキャッチできる特別な構文です。

つまり、私はそのようなこともできるということですか?:

   boolean bool1 = (int1 == (int2 | int3));

または、このようなオブジェクトをキャストしますか?:

   (obj1 | obj2) someObject;

または、常に次のようにオブジェクトを指定しますか?:

   obj1 | obj2 someName;

いいえ、いいえ、いいえ。

その特別な構文は、キャッチフレーズ「署名」の特定のコンテキストでのみ使用できます。

最初の例は構文的には正しいですが、あなたが考えていることをしていないことに注意してください。具体的には、次の 2 つのステートメントは異なる意味を持ちます。

boolean bool1 = (int1 == (int2 | int3));
boolean bool2 = ((int1 == int2) || (int == int3));

int2最初のものは、 andのビットごとの OR を実行しint3、結果が と等しいかどうかをテストしint1ます。これを 、 、 で試すint1 == 0b0011と、int2 == 0b0001int3 == 0b0010bool1なります。truebool2false

他の 2 つの例は、(式として) 構文的に正しくありません。

于 2015-10-24T23:47:27.700 に答える
2
  • ||は論理演算子であり、値にのみ適用できbooleanます。
  • |はビット単位の演算子であり、整数型にも適用できます。

ビット演算子は、整数の各ビットに対して演算を実行します。例: 5 | 6 = 7( 00000101 | 00000110 = 00000111)。一般に、(ブール値の配列ではなく) 整数の異なるビットに設定されたフラグを追加して比較するために使用されます。

例外の場合、この構造は Java 7 に付属しています。単一のcatchステートメントで複数の例外タイプをキャッチできるようになりました。この場合の縦棒は演算子ではなく、新しい構造の要素です。

ただし、|(nor ||) をオブジェクトの演算子として使用することはできません。

于 2015-10-24T23:49:01.580 に答える
0

少なくとも C++ では、2 つのステートメントは同等ではありません。

ステートメント 1 :(int1 == int2 || int1 == int3)

ステートメント 2: ( int1 == (int2 | int3) )

演算子 | はビットごとの OR です。つまり、(00001111 | 11110000)になり11111111ます。

int1バイナリで is 1111int2is 1100int3isとしましょう0011。次に、statement1 が戻りfalse、statement2 が戻りtrueます。

于 2015-10-24T23:35:49.523 に答える