“|”运算符的特殊用法,如 catch (NullPointerException | NumberFormatException e)
Special usage of " | " operator, like catch (NullPointerException | NumberFormatException e)
我有这个想法是因为 eclipse (Java),它显示了向 catch 子句添加多个异常的可能性,如下所示:
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;
感谢您的任何回答,
艾伦
至少在C++中,这两个语句是不等价的:
声明 1 : (int1 == int2 || int1 == int3)
声明 2:( int1 == (int2 | int3) )
运营商|是按位或。也就是说,(00001111 | 11110000)
将导致 11111111
。
假设 int1
在二进制中是 1111
,而 int2
是 1100
,int3
是 0011
。
然后语句 1 将 return false
,而语句 2 将 return true
.
在异常标语中使用 |
不是运算符。它是一种特殊的语法,可让您捕获一组异常。
So does that mean that i can also do stuff like that?:
boolean bool1 = (int1 == (int2 | int3));
or cast an object like this?:
(obj1 | obj2) someObject;
or always specify Objects like this?:
obj1 | obj2 someName;
不不不不
该特殊语法 只能 用于流行语的特定上下文 "signature"。
请注意,您的第一个示例在语法上是正确的,但它并没有按照您的想法进行。具体来说,这两个语句意味着不同的东西:
boolean bool1 = (int1 == (int2 | int3));
boolean bool2 = ((int1 == int2) || (int == int3));
第一个执行 int2
和 int3
的按位或并测试结果是否等于 int1
。如果我们尝试使用 int1 == 0b0011
、int2 == 0b0001
和 int3 == 0b0010
,bool1
将是 true
而 bool2
将是 false
。
其他两个示例在语法上不正确(作为表达式)。
||
是一个逻辑运算符,只能 应用于 boolean
值。
|
是按位运算符,也可以应用于 整数 类型。
按位运算符对 整数 数的每一位执行运算。例如:5 | 6 = 7
(00000101 | 00000110 = 00000111
)。它通常用于添加和比较在整数的不同位上设置的标志(而不是布尔数组)。
在异常的情况下,此构造附带Java 7。您现在可以使用单个catch
语句捕获多种异常类型。本例中的竖线不是运算符,而是新结构的一个元素。
但是,您不能将 |
(也不 ||
)用作对象的运算符。
我有这个想法是因为 eclipse (Java),它显示了向 catch 子句添加多个异常的可能性,如下所示:
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;
感谢您的任何回答, 艾伦
至少在C++中,这两个语句是不等价的:
声明 1 : (int1 == int2 || int1 == int3)
声明 2:( int1 == (int2 | int3) )
运营商|是按位或。也就是说,(00001111 | 11110000)
将导致 11111111
。
假设 int1
在二进制中是 1111
,而 int2
是 1100
,int3
是 0011
。
然后语句 1 将 return false
,而语句 2 将 return true
.
在异常标语中使用 |
不是运算符。它是一种特殊的语法,可让您捕获一组异常。
So does that mean that i can also do stuff like that?:
boolean bool1 = (int1 == (int2 | int3));
or cast an object like this?:
(obj1 | obj2) someObject;
or always specify Objects like this?:
obj1 | obj2 someName;
不不不不
该特殊语法 只能 用于流行语的特定上下文 "signature"。
请注意,您的第一个示例在语法上是正确的,但它并没有按照您的想法进行。具体来说,这两个语句意味着不同的东西:
boolean bool1 = (int1 == (int2 | int3));
boolean bool2 = ((int1 == int2) || (int == int3));
第一个执行 int2
和 int3
的按位或并测试结果是否等于 int1
。如果我们尝试使用 int1 == 0b0011
、int2 == 0b0001
和 int3 == 0b0010
,bool1
将是 true
而 bool2
将是 false
。
其他两个示例在语法上不正确(作为表达式)。
||
是一个逻辑运算符,只能 应用于boolean
值。|
是按位运算符,也可以应用于 整数 类型。
按位运算符对 整数 数的每一位执行运算。例如:5 | 6 = 7
(00000101 | 00000110 = 00000111
)。它通常用于添加和比较在整数的不同位上设置的标志(而不是布尔数组)。
在异常的情况下,此构造附带Java 7。您现在可以使用单个catch
语句捕获多种异常类型。本例中的竖线不是运算符,而是新结构的一个元素。
但是,您不能将 |
(也不 ||
)用作对象的运算符。