Java中的布尔值

Java中的布尔值,java,boolean,Java,Boolean,我是一个初学者,开始学习java语言。我在书中遇到了一个关于布尔人的问题。我不知道如何找到问题的价值,我想知道是否有人能给我一个代码应该是什么样子的示例。非常感谢您的帮助 书中的问题: 假设b的值为false,x的值为0。以下每个表达式的值是多少 a b&&x==0 b | | x==0 c!b&&x==0 d!b | | x==0 e b&x!=0 f b | | x!=0 g!b&x!=0 啊!b | | x!=0 我只是不知道该如何解决这个问题,救命! 如果你看Java,那就谢谢你了and

我是一个初学者,开始学习java语言。我在书中遇到了一个关于布尔人的问题。我不知道如何找到问题的价值,我想知道是否有人能给我一个代码应该是什么样子的示例。非常感谢您的帮助

书中的问题:

假设b的值为false,x的值为0。以下每个表达式的值是多少

a b&&x==0

b | | x==0

c!b&&x==0

d!b | | x==0

e b&x!=0

f b | | x!=0

g!b&x!=0

啊!b | | x!=0

我只是不知道该如何解决这个问题,救命! 如果你看Java,那就谢谢你了and==比&&和| |逻辑and和OR具有更高的优先级。所以

b && x == 0
只是

b && (x == 0) // --> here x==0 gets evaluated first due to precedence
那是

b && true // (cause x is 0)
既然b是false,那么在Java中,最终结果是false,!=and==比&&和| |逻辑and和OR具有更高的优先级。所以

b && x == 0
只是

b && (x == 0) // --> here x==0 gets evaluated first due to precedence
那是

b && true // (cause x is 0)

由于b为假,最终结果为假

回想一下,&&和| |两边都需要布尔值 回想一下!反转布尔值 回想一下二进制操作!=and==将整数对转换为布尔值 从右边开始;决定它是真是假 将上一行的结果放入表达式中 使用对应逻辑运算符的真值表计算结果。 让我们以您的前两个练习为例:

b&&x==0

你知道b是假的,所以和的结果马上就被知道了:它是假的-没有必要做任何其他事情

b | | x==0

你知道b是假的,所以OR的结果现在还不知道。 计算x==0该值为真 计算b | | true该值为true,因为使用true或ing始终为true。
以下是您处理此问题的方法:

回想一下,&&和| |两边都需要布尔值 回想一下!反转布尔值 回想一下二进制操作!=and==将整数对转换为布尔值 从右边开始;决定它是真是假 将上一行的结果放入表达式中 使用对应逻辑运算符的真值表计算结果。 让我们以您的前两个练习为例:

b&&x==0

你知道b是假的,所以和的结果马上就被知道了:它是假的-没有必要做任何其他事情

b | | x==0

你知道b是假的,所以OR的结果现在还不知道。 计算x==0该值为真 计算b | | true该值为true,因为使用true或ing始终为true。
这本书应该解释每个操作的作用。您可以通过以下方式测试结果:

boolean b = false;
int x = 0;
System.out.println(b && (x == 0));

输出应给出正确或错误的答案。

这本书应解释每个操作的作用。您可以通过以下方式测试结果:

boolean b = false;
int x = 0;
System.out.println(b && (x == 0));
输出应给出正确或错误的答案。

当b是左侧的表达式时:带&&的任何内容都将返回false,因为b为false

当左侧包含b时,仅当右侧的表达式返回true时,every | |才会返回true,否则将返回false

让我们看一下您发布的几个示例:

a b&&x==0=>将计算为false,因为b为false,我们使用&&and

b | | x==0=>将计算为true,因为x==0为true,我们使用| |或

如果左侧包含!b则只有当右侧的计算结果为true时,任何具有&&的表达式才会计算为true。如果表达式有| |它会 无论右侧的表达式如何,计算结果均为true

c!b&&x==0=>将计算为true:因为双方都计算为true

d!b | | x==0=>将计算为true:因为双方的计算结果都为true

g!b&x!=0=>将计算为false,因为&&要求两边都为true,但右侧计算为false

啊!b | | x!=0=>将计算为true,因为左侧的计算结果为true,当b是左侧的表达式时,我们使用OR |

:任何带&&的内容都将返回false,因为b为false

当左侧包含b时,仅当右侧的表达式返回true时,every | |才会返回true,否则将返回false

让我们看一下您发布的几个示例:

a b&&x==0=>将计算为false,因为b为false,我们使用&&and

b | | x==0=>将计算为true,因为x==0为true,我们使用| |或

如果左侧包含!b则只有当右侧的计算结果为true时,任何具有&&的表达式才会计算为true。如果表达式有| |它会 无论右侧的表达式如何,计算结果均为true

c!b&&x==0=>将计算为true:因为双方都计算为true

d!b | | x==0=>将计算为true:因为双方都计算为tru e

g!b&x!=0=>将计算为false,因为&&要求两边都为true,但右侧计算为false


啊!b | | x!=0=>将计算为true,因为左侧的计算结果为true,我们使用OR | |

因为您试图学习Java,启动eclipse并执行以下操作:

public static void main (String args[]) {

    boolean b = false;
    int x = 0;
    if(b || x == 0) System.out.println(true);
    else System.out.println(false);
}

那么您至少对第一个问题有了答案。

既然您正在尝试学习Java,启动eclipse并执行以下操作:

public static void main (String args[]) {

    boolean b = false;
    int x = 0;
    if(b || x == 0) System.out.println(true);
    else System.out.println(false);
}

然后您至少可以得到第一个表达式的答案。

查找表达式值的简单方法是将表达式打印到屏幕上,在您的情况下:

boolean b = false;
int x = 0;

System.out.println(b && x == 0);   // false
System.out.println(b || x == 0);   // true
System.out.println(!b && x == 0);  // true
System.out.println(!b || x == 0);  // true
System.out.println(b && x != 0);   // false
System.out.println(b || x != 0);   // false
System.out.println(!b && x != 0);  // false
System.out.println(!b || x != 0);  // true
您必须将其放入Java类中并运行,例如:

public class HelloBoolean {
    public static void main (String args[]) {
        // code comes here ...
    }
}

查找表达式值的一种简单方法是将表达式打印到屏幕上(在您的情况下):

boolean b = false;
int x = 0;

System.out.println(b && x == 0);   // false
System.out.println(b || x == 0);   // true
System.out.println(!b && x == 0);  // true
System.out.println(!b || x == 0);  // true
System.out.println(b && x != 0);   // false
System.out.println(b || x != 0);   // false
System.out.println(!b && x != 0);  // false
System.out.println(!b || x != 0);  // true
您必须将其放入Java类中并运行,例如:

public class HelloBoolean {
    public static void main (String args[]) {
        // code comes here ...
    }
}

首先,与许多其他语言不同,0在java中不是错误的。它是纯整数

假设您熟悉主要功能。 请记住使用与其公共类相同的名称保存文件

在本例中,BooleansDemo.java

在此之前的答案中对优先规则进行了详细描述


首先,与许多其他语言不同,0在java中不是错误的。它是纯整数

假设您熟悉主要功能。 请记住使用与其公共类相同的名称保存文件

在本例中,BooleansDemo.java

在此之前的答案中对优先规则进行了详细描述

条件算子

&&和| |运算符对两个布尔表达式执行条件and和条件OR运算。 这些运算符表现出短路行为,这意味着只对第二个操作数求值 如果需要的话

&&有条件和

||有条件的或

a b&&x==0

&&是有条件的,这意味着只有当左操作数为真时才计算右操作数。 在您的例子中,b为false,这意味着求值结束,因为无论什么情况,false&&都不可能为true。

b | | x==0

||是条件或,这意味着只有在第一个操作数为false时才计算右操作数。 在您的例子中,b为false,因此我们需要计算x==0才能得到结果

条件算子

&&和| |运算符对两个布尔表达式执行条件and和条件OR运算。 这些运算符表现出短路行为,这意味着只对第二个操作数求值 如果需要的话

&&有条件和

||有条件的或

a b&&x==0

&&是有条件的,这意味着只有当左操作数为真时才计算右操作数。 在您的例子中,b为false,这意味着求值结束,因为无论什么情况,false&&都不可能为true。

b | | x==0

||是条件或,这意味着只有在第一个操作数为false时才计算右操作数。
在您的例子中,b为false,因此我们需要计算x==0才能得到结果

首先,您需要了解涉及的操作员。 我们要处理五个接线员

&&:如果其两个操作数均为true,则结果为true。 这可以通过下面的真值表得出

|   A   |   B   | A && B | 
+-------+-------+--------+
| true  | true  |  true  |
+-------+-------+--------+
| true  | false |  false |
+-------+-------+--------+
| false | true  |  false |
+-------+-------+--------+
| false | false |  false |
|   A   |   B   | A || B | 
+-------+-------+--------+
| true  | true  |  true  |
+-------+-------+--------+
| true  | false |  true  |
+-------+-------+--------+
| false | true  |  true  |
+-------+-------+--------+
| false | false |  false |
|   A   |  !A   |
+-------+-------+
| true  | false |
+-------+-------+
| false | true  |
||:每当一个或多个操作数为true时,生成true结果。 这可以通过下面的真值表得出

|   A   |   B   | A && B | 
+-------+-------+--------+
| true  | true  |  true  |
+-------+-------+--------+
| true  | false |  false |
+-------+-------+--------+
| false | true  |  false |
+-------+-------+--------+
| false | false |  false |
|   A   |   B   | A || B | 
+-------+-------+--------+
| true  | true  |  true  |
+-------+-------+--------+
| true  | false |  true  |
+-------+-------+--------+
| false | true  |  true  |
+-------+-------+--------+
| false | false |  false |
|   A   |  !A   |
+-------+-------+
| true  | false |
+-------+-------+
| false | true  |
!:当其操作数为false时生成值true,当其操作数为true时生成值false。 这可以通过下面的真值表得出

|   A   |   B   | A && B | 
+-------+-------+--------+
| true  | true  |  true  |
+-------+-------+--------+
| true  | false |  false |
+-------+-------+--------+
| false | true  |  false |
+-------+-------+--------+
| false | false |  false |
|   A   |   B   | A || B | 
+-------+-------+--------+
| true  | true  |  true  |
+-------+-------+--------+
| true  | false |  true  |
+-------+-------+--------+
| false | true  |  true  |
+-------+-------+--------+
| false | false |  false |
|   A   |  !A   |
+-------+-------+
| true  | false |
+-------+-------+
| false | true  |
==等于:就本问题而言,它比较两个数字,如果两个数字相同,则返回true

!=不等于:这是一个缩写!A==B,即,如果数字不相同,则返回true

请注意,&&和| |都受益于也称为快捷方式的评估。这意味着只有在必要时才会对第二个操作数(右侧操作数)求值

合取&要求两个操作数都为true。它首先计算第一个操作数。如果第一个操作数的计算结果为false,则整个连词都为false,并且计算第二个操作数没有意义

析取| |要求一个操作数为真。它首先计算第一个操作数。如果第一个操作数的计算结果为true,则整个析取为true,并且计算第二个操作数没有意义

还请注意,其余三个操作数的优先级高于&&和| |。例如,b&&x==0与b&&x==0完全相同。然而,评价的顺序仍然存在

总结:

a) b && x == 0  // false: b is false, short-circuit applies

b) b || x == 0 // true: b is false, x == 0 is evaluated to true

c) !b && x == 0 // true: !b is true, and x == 0 is also true

d) !b || x == 0 // true: !b is true, short-circuit applies

e) b && x != 0 // false: b is false, short-circuit applies

f) b || x != 0 // false: b is false, x != 0 is also false

g) !b && x != 0 // false: !b is true, however x != 0 is false

h) !b || x != 0 // true: !b is true, short-circuit applies

首先,您需要了解涉及的操作员。 我们要处理五个接线员

&&:如果其两个操作数均为true,则结果为true。 这可以通过下面的真值表得出

|   A   |   B   | A && B | 
+-------+-------+--------+
| true  | true  |  true  |
+-------+-------+--------+
| true  | false |  false |
+-------+-------+--------+
| false | true  |  false |
+-------+-------+--------+
| false | false |  false |
|   A   |   B   | A || B | 
+-------+-------+--------+
| true  | true  |  true  |
+-------+-------+--------+
| true  | false |  true  |
+-------+-------+--------+
| false | true  |  true  |
+-------+-------+--------+
| false | false |  false |
|   A   |  !A   |
+-------+-------+
| true  | false |
+-------+-------+
| false | true  |
||:每当一个或多个操作数为true时,生成true结果 . 这可以通过下面的真值表得出

|   A   |   B   | A && B | 
+-------+-------+--------+
| true  | true  |  true  |
+-------+-------+--------+
| true  | false |  false |
+-------+-------+--------+
| false | true  |  false |
+-------+-------+--------+
| false | false |  false |
|   A   |   B   | A || B | 
+-------+-------+--------+
| true  | true  |  true  |
+-------+-------+--------+
| true  | false |  true  |
+-------+-------+--------+
| false | true  |  true  |
+-------+-------+--------+
| false | false |  false |
|   A   |  !A   |
+-------+-------+
| true  | false |
+-------+-------+
| false | true  |
!:当其操作数为false时生成值true,当其操作数为true时生成值false。 这可以通过下面的真值表得出

|   A   |   B   | A && B | 
+-------+-------+--------+
| true  | true  |  true  |
+-------+-------+--------+
| true  | false |  false |
+-------+-------+--------+
| false | true  |  false |
+-------+-------+--------+
| false | false |  false |
|   A   |   B   | A || B | 
+-------+-------+--------+
| true  | true  |  true  |
+-------+-------+--------+
| true  | false |  true  |
+-------+-------+--------+
| false | true  |  true  |
+-------+-------+--------+
| false | false |  false |
|   A   |  !A   |
+-------+-------+
| true  | false |
+-------+-------+
| false | true  |
==等于:就本问题而言,它比较两个数字,如果两个数字相同,则返回true

!=不等于:这是一个缩写!A==B,即,如果数字不相同,则返回true

请注意,&&和| |都受益于也称为快捷方式的评估。这意味着只有在必要时才会对第二个操作数(右侧操作数)求值

合取&要求两个操作数都为true。它首先计算第一个操作数。如果第一个操作数的计算结果为false,则整个连词都为false,并且计算第二个操作数没有意义

析取| |要求一个操作数为真。它首先计算第一个操作数。如果第一个操作数的计算结果为true,则整个析取为true,并且计算第二个操作数没有意义

还请注意,其余三个操作数的优先级高于&&和| |。例如,b&&x==0与b&&x==0完全相同。然而,评价的顺序仍然存在

总结:

a) b && x == 0  // false: b is false, short-circuit applies

b) b || x == 0 // true: b is false, x == 0 is evaluated to true

c) !b && x == 0 // true: !b is true, and x == 0 is also true

d) !b || x == 0 // true: !b is true, short-circuit applies

e) b && x != 0 // false: b is false, short-circuit applies

f) b || x != 0 // false: b is false, x != 0 is also false

g) !b && x != 0 // false: !b is true, however x != 0 is false

h) !b || x != 0 // true: !b is true, short-circuit applies


理解逻辑运算符的含义。查找,&&是共轭,| |是析取。@LuiggiMendoza它不是布尔/整数比较。右侧操作是逻辑int/int求值,返回的布尔值x==0可以是true,也可以是truefalse@CristianMeneses我的错。然后,请拿一支铅笔和一张纸做练习,否则你就学不到了。需要了解的重要事项是:1在Java中布尔不是数字类型,不能用在int表达式中。2&&和| |是短路运算符,因此如果可以通过计算左侧来确定结果,右侧甚至未进行评估,事实上,不得进行评估。3运算符优先级-联机查找表并将其添加到书签中。了解逻辑运算符的含义。查找,&&是共轭,| |是析取。@LuiggiMendoza它不是布尔/整数比较。右侧操作是逻辑int/int求值,返回的布尔值x==0可以是true,也可以是truefalse@CristianMeneses我的错。然后,请拿一支铅笔和一张纸做练习,否则你就学不到了。需要了解的重要事项是:1在Java中布尔不是数字类型,不能用在int表达式中。2&&和| |是短路运算符,因此如果可以通过计算左侧来确定结果,右侧甚至未进行评估,事实上,不得进行评估。3运算符优先级-联机查找表并将其标记为书签。否。b为false,因此在&&的右侧没有对x==0的求值。false&&x==0永远不可能是真的,所以短路评估已经完成,这意味着没有评估x==0。我已经删除了旁注,我认为@MichaelKonietzka是正确的,这是因为短路,但你仍然说x==0首先得到评估。那不是真的。那么,区分优先顺序和求值顺序?否。b是假的,因此在&&的右侧没有x==0的求值。false&&x==0永远不可能是真的,所以短路评估已经完成,这意味着没有评估x==0。我已经删除了旁注,我认为@MichaelKonietzka是正确的,这是因为短路,但你仍然说x==0首先得到评估。那不是真的。那么,区分优先顺序和求值顺序?计算顺序是错误的:在运行时,首先求值左侧操作数表达式。如果结果值为true,则条件或表达式的值为true,并且不计算右侧操作数表达式。如果左侧操作数的值为false,则计算右侧表达式;这意味着:1。计算b2。b为false,因此计算x==0。3.将HORE表达式求值为true。@MichaelKonietzka I没有提到计算顺序:OP不需要像编译器那样获得所讨论的逻辑表达式的结果。我这样做是有意的,以避免混淆纯逻辑及其实现。当然,他需要做编译器所做的事情,因为这些是Java表达式,而不仅仅是布尔代数。@MichaelKonietzka我不同意:考虑到赋值缺乏上下文和所涉及表达式的简单性,似乎创建作业的人想先教OP一些布尔代数,然后再进行评估。Java语法用于这些表达式的事实对于理解它们的含义来说是次要的。我不同意:左操作数优先和短路是&&和| |的关键特性。要教布尔代数,只需使用&和|。关于b | | x==0,最初x==0的计算是错误的。计算顺序是错误的:在运行时,左边的运算
首先计算rand表达式。如果结果值为true,则条件或表达式的值为true,并且不计算右侧操作数表达式。如果左侧操作数的值为false,则计算右侧表达式;这意味着:1。计算b2。b为false,因此计算x==0。3.将HORE表达式求值为true。@MichaelKonietzka I没有提到计算顺序:OP不需要像编译器那样获得所讨论的逻辑表达式的结果。我这样做是有意的,以避免混淆纯逻辑及其实现。当然,他需要做编译器所做的事情,因为这些是Java表达式,而不仅仅是布尔代数。@MichaelKonietzka我不同意:考虑到赋值缺乏上下文和所涉及表达式的简单性,似乎创建作业的人想先教OP一些布尔代数,然后再进行评估。Java语法用于这些表达式的事实对于理解它们的含义来说是次要的。我不同意:左操作数优先和短路是&&和| |的关键特性。要教布尔代数,只需使用&和|。关于b | x==0,最初x==0的计算是错误的。