Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.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 |运算符_Java_Operators - Fatal编程技术网

Java |运算符

Java |运算符,java,operators,Java,Operators,在我的Java编程初学者课程中,我有这个问题,我在书中找不到单个“|”作为运算符的含义 问题是: int j = 0; if ((8 > 4) | (j++ == 7)) System.out.println("j = " + j); j=1吗 解释原因 本书用示例解释了OR运算符“| |”,但没有显示单个“|”。运算符的含义是否在两个操作数之间发生变化?|->这是按位操作,或者运算符执行按位包含或运算,并同时执行两个操作数(右操作数和左操作数) 如果一个或两个 其操作数

在我的Java编程初学者课程中,我有这个问题,我在书中找不到单个“|”作为运算符的含义

问题是:

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

解释原因


本书用示例解释了OR运算符“| |”,但没有显示单个“|”。运算符的含义是否在两个操作数之间发生变化?

|
->这是按位操作,或者运算符执行按位包含或运算,并同时执行两个操作数(右操作数和左操作数)

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


此处
8>4
将返回
true
j++==7
将返回
false
。因此,如果(true | false)则为
,此时逐位运算符将返回
true
或1,并打印j的值,该值在j++之后变为1。

->这是逐位or运算符执行逐位包含或运算,并执行两个操作数(右和左)

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


此处
8>4
将返回
true
j++==7
将返回
false
。因此,如果(true | false)
则为
,此时位运算符将返回
true
或1,并打印j的值,该值在j++之后变为1。

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

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

if(b | foo.test())
{
   //we entered  calling test()
}

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

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

if(b | foo.test())
{
   //we entered  calling test()
}

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

答案是否定的,因为j初始化为0,但此后从未赋值。因此j的值在整个时间内都保持在0。

是的,含义会改变,
|
是逻辑
运算符,而
|
是按位
运算符


由于此运算符在位级别操作(…),因此它不会以与
|
相同的方式短路,这意味着,即使第一个操作数为
,也会计算第二个操作数。

是的,含义会发生变化,
|
是逻辑
运算符,而
|
是按位


由于此运算符在位级别上操作(…),因此它不会以与
|
相同的方式短路,这意味着,即使第一个操作数为
true
,也会对第二个操作数求值。

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

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


在您的情况下,始终计算
(j++==7)
,而不管
8>4的结果如何。这不会发生在
|
运算符上。因此,
j
将递增1,程序的输出是
1

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

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


在您的情况下,始终计算
(j++==7)
,而不管
8>4的结果如何。这不会发生在
|
运算符上。所以,<代码> j/Cube >将增加1,程序的输出是“代码> 1”/Cord>。< /P>这是位或运算符@ JojEujVIZA,为什么你发布了一个C++站点的链接?看得更硬,或者得到一本更好的书。它是位或操作符@ JojeZuVuz,为什么你发布了一个C++站点的链接?看起来更难,或者得到一本更好的书。它也是(非速记)
条件运算符。它也是(非速记)
条件运算符。但在运算符的右侧,j++不是在初始化的数字上加1吗?(j++==7)计算j++=7,但它不增加j。要增加j,您应该看到j=j++;(==意味着评估,而=意味着分配)在一个小型java应用程序中尝试它(在主函数的右边)。你会发现j从来没有递增过。西蒙,你的说法是错误的。j++是j的就地递增,意思是,它相当于j=j+1或j++=1。在++j和j++之间有区别,但这不是重点,因为它在这种情况下没有影响。但是在操作符的右侧,j++不是在initi中添加了1吗如果j++=7,则计算j++=7,但它不会增加j。要增加j,您应该看到j=j++;(==表示求值,而=表示赋值)在一个小型java应用程序中尝试(在主函数的右侧)。Yo