Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “的特殊用法”&引用;运算符,如catch(NullPointerException | NumberFormatException)_Java_Casting_Boolean_Identifier_Bitwise Or - Fatal编程技术网

Java “的特殊用法”&引用;运算符,如catch(NullPointerException | NumberFormatException)

Java “的特殊用法”&引用;运算符,如catch(NullPointerException | NumberFormatException),java,casting,boolean,identifier,bitwise-or,Java,Casting,Boolean,Identifier,Bitwise Or,我之所以有这样的想法是因为eclipse(Java),它显示了向catch子句添加多个异常的可能性,如下所示: String someInput; int int1; try { int1 = Integer.parseInt(someInput); } catch (NullPointerException | NumberFormatException e) { e.printStackTrace; } 这是否意味着我也可以做类似的事情 boolen bool1 = (i

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

String someInput;
int int1;

try {
    int1 = Integer.parseInt(someInput);
} catch (NullPointerException | NumberFormatException e) {
    e.printStackTrace;
}
这是否意味着我也可以做类似的事情

boolen bool1 = (int1 == (int2 | int3));
   boolean bool1 = (int1 == (int2 | int3));
或者像这样投射一个物体

(obj1 | obj2) someObject;
obj1 | obj2 someName;
   (obj1 | obj2) someObject;
   obj1 | obj2 someName;
还是始终指定这样的对象?:

(obj1 | obj2) someObject;
obj1 | obj2 someName;
   (obj1 | obj2) someObject;
   obj1 | obj2 someName;
谢谢你的回答,
AYRE

< P>至少在C++中,这两个语句不等价:

语句1:
(int1==int2 | | int1==int3)

语句2:
(int1==(int2 | int3))

运算符|是按位OR。也就是说,
(000011111 | 11110000)
将导致
11111111

假设二进制中的
int1
1111
,而
int2
1100
int3
0011

然后语句1将返回
false
,而语句2将返回
true
在异常捕获短语中使用
|
不作为运算符。它是一种特殊的语法,允许您捕获一组异常

这是否意味着我也可以做类似的事情

boolen bool1 = (int1 == (int2 | int3));
   boolean bool1 = (int1 == (int2 | int3));
或者像这样投射一个物体

(obj1 | obj2) someObject;
obj1 | obj2 someName;
   (obj1 | obj2) someObject;
   obj1 | obj2 someName;
还是始终指定这样的对象?:

(obj1 | obj2) someObject;
obj1 | obj2 someName;
   (obj1 | obj2) someObject;
   obj1 | obj2 someName;
不,不,不

这种特殊的语法只能在捕获短语“签名”的特定上下文中使用

请注意,您的第一个示例在语法上是正确的,但它并不符合您的想法。具体而言,这两种说法的含义不同:

boolean bool1 = (int1 == (int2 | int3));
boolean bool2 = ((int1 == int2) || (int == int3));
第一个执行
int2
int3
的按位或运算,并测试结果是否等于
int1
。如果我们用
int1==0b0011
int2==0b0001
int3==0b0010
,则
bool1
将为
true
bool2
将为
false

其他两个示例在语法上不正确(作为表达式)。

  • |
    是一个逻辑运算符,只能应用于
    布尔值
  • |
    是一个位运算符,也可以应用于整数类型
逐位运算符对整数的每一位执行运算。例如:
5 | 6=7
00000101 | 00000110=00000111
)。它通常用于添加和比较在整数的不同位上设置的标志(而不是布尔数组)

异常的情况下,这种构造是与Java7一起出现的。现在,您可以使用一条
catch
语句捕获多个异常类型。在本例中,竖杆不是操作符,而是新构造的元素


但是,您不能将
|
(或
|
)用作对象的运算符。

您所指的编程语言是什么?您可以尝试运行此代码,看看它是否有效。这取决于编程语言。它不是C++,它不像java或者C语言。这是什么?@iTayb将语言添加为tageasy-to-verify,比如int1=3;int2=1和int3=2;然后有int1==(int2 | int3)(因为1或2=3),但int1不等于int2,或者int3 |也是一个逻辑运算符。它是| |的非短路版本,这意味着即使第一个条件为真,也将对第二个条件进行评估。