"|"运算符的特殊用法,如catch(NullPointerException | NumberFormatException e)

Ayr*_*ren 0 java casting boolean identifier bitwise-or

我得到了这个想法,因为eclipse(Java)它显示了向catch子句添加多个异常的可能性,如下所示:

String someInput;
int int1;

try {
    int1 = Integer.parseInt(someInput);
} catch (NullPointerException | NumberFormatException e) {
    e.printStackTrace;
}
Run Code Online (Sandbox Code Playgroud)

那么这是否意味着我也可以这样做?:

boolen bool1 = (int1 == (int2 | int3));
Run Code Online (Sandbox Code Playgroud)

或者像这样投射一个物体?:

(obj1 | obj2) someObject;
Run Code Online (Sandbox Code Playgroud)

或者总是指定像这样的对象?:

obj1 | obj2 someName;
Run Code Online (Sandbox Code Playgroud)

谢谢你的任何答案,艾伦

Ste*_*n C 5

采用|一个异常口头禅是不是作为一个运营商.它是一种特殊语法,允许您捕获一组异常.

那么这是否意味着我也可以这样做?:

   boolean bool1 = (int1 == (int2 | int3));
Run Code Online (Sandbox Code Playgroud)

或者像这样投射一个物体?:

   (obj1 | obj2) someObject;
Run Code Online (Sandbox Code Playgroud)

或者总是指定像这样的对象?:

   obj1 | obj2 someName;
Run Code Online (Sandbox Code Playgroud)

不,不,不.

该特殊语法只能用于标记"签名"的特定上下文中.

请注意,您的第一个示例在语法上是正确的,但它没有按您的想法执行.具体来说,这两个陈述意味着不同的事情

boolean bool1 = (int1 == (int2 | int3));
boolean bool2 = ((int1 == int2) || (int == int3));
Run Code Online (Sandbox Code Playgroud)

第一个执行OR的逐位int2int3,并且如果结果是等于测试int1.如果我们尝试这个int1 == 0b0011,int2 == 0b0001并且int3 == 0b0010,bool1将会truebool2将来false.

另外两个例子在语法上是不正确的(作为表达式).