1

我在我的初学者 Java 编程课上有这个问题,我在我的书中找不到一个单一的 '|' 表示作为操作员。

问题是:

int j = 0;    
if ((8 > 4) | (j++ == 7))
    System.out.println("j = " + j);

j = 1吗?

解释为什么。

这本书解释了 OR 运算符“||” 有例子,但它没有显示这个单一的“|”。运算符的含义是否在两者之间改变?

4

5 回答 5

5

是的,意思变了,||是逻辑or运算符,|而是按位or

由于此运算符在位级别操作 (...),因此它不会像 , 那样短路||,这意味着即使第一个操作数是true,也会计算第二个操作数。

于 2013-02-05T16:47:53.367 回答
3

如果您使用||and&&形式,而不是这些运算符的|and&形式,Java 将不会费心单独计算右侧操作数。

Boolean b = true;
if(b || foo.test())
{
   //we entered without calling test()
}

if(b | foo.test())
{
   //we entered  calling test()
}
于 2013-02-05T16:45:31.173 回答
1

|-> 这是按位 OR 运算符执行按位包含 OR 运算并执行两个操作数(右和左)。

按位或“|” 如果操作数中的一个或两个位为 1,则运算符产生 1。但是,如果两个位都为 0,则此运算符产生 0。更准确地说,或“|” 运算符在所有情况下都返回 1,除非两个操作数的位都为 0。

if ((8 > 4) | (j++ == 7)) System.out.println("j = " + j);

这里8>4将返回true并将j++ == 7返回false。所以它将是if(true|false),这里按位运算符将返回true或 1 并打印 j 的值,该值在 j++ 之后变为 1。

于 2013-02-05T16:45:03.340 回答
0

运算符是按位或,|但您可能会问为什么有人会对布尔变量使用按位或?

逻辑或运算符 ( ||) 有一个称为短路的特性,这意味着如果左操作数的计算结果为true,则不会进行进一步的处理,甚至右手操作数也不会计算。但是按位 OR 运算符|总是对两个操作数求值,如果应用于布尔操作数,则对它们都求值,然后对结果应用简单的或。

在您的情况下(j++ == 7),无论8 > 4. 操作员不会发生这种情况||。所以j会加一,程序的输出是1.

于 2013-02-05T16:56:47.080 回答
-1

答案是否定的,因为 j 被初始化为 0,但此后从未赋值。因此 j 的值始终保持为 0。

于 2013-02-05T16:46:33.550 回答