提问人:Carson Turner 提问时间:1/20/2023 最后编辑:hfontanezCarson Turner 更新时间:1/20/2023 访问量:70
将 int 初始化与 if 语句参数的布尔运算符进行比较
Comparing an int initialization with a boolean operator for an if statement parameter
问:
我已经声明了 ints skyB 和 day,并写了这一行:
if (skyB == true || (day=1) != true) {
System.out.print("example text");
}
我假设代码将正确执行给定这些参数的参数是否正确?我特别不确定 (day=“1”) 是否会被正确检测为 false,因为对象输入确实是 false。
最小可重现示例(不包括主要方法或软件包):
int skyB = false;
int day =2;
if (skyB == true || (day =1) != true) {
System.out.print("example text"); }
答:
答案很简单:这不是C++
不能将数值分配给布尔字段。在 Java 中,只有两个有效值是 和 。因此,不能将整数值分配给布尔变量。true
false
要使布尔表达式有效,变量 和 必须是数据类型skyB
day
boolean
boolean skyB = false
boolean day = true
if (!skyB || day) {
System.out.print("example text");
}
无需将它们与 true 或 false 进行比较即可计算这些字段。表达式(读作“not skyB”)的计算结果为 。所以这相当于.由于该部分的计算结果为 true(skyB 等于 false),因此跳过表达式的第二部分并调用 。如果将值 of 更改为 true,则将计算该变量,并且如果该变量的值等于 true(确实如此),则将执行 if 语句。boolean
!skyB
false
skyB == false
System.out.print()
skyB
day
或者,您可以使用数值生成布尔表达式。如何?简单。任何数学表达式的计算结果都相同。例如:
int x = 5;
int y = 3;
if (x > y) {
System.out.println("x is greater than y");
}
基本上。。。您尝试执行的逻辑(我的理解方式)是正确的,但您的实现并非如此。不能混合使用布尔字段和数值。这在 Java 中是不允许的。
现在,对于你的问题......
boolean skyB = false; // this must be boolean, not int
int day =2; // this is fine
if (skyB || day == 1) {
System.out.print("example text");
}
应该产生预期的结果。用通俗易懂的英语,上面的内容如下:
如果 skyB 是假的,或者是第一天,请打印“示例测试”
如果表达式的任一部分的计算结果为 true(即,如果 skyB 为 true,并且 day 变量是 1 以外的任何值),则不会打印任何内容。
更新:
即使这个答案已被接受并被点赞,我也想包含一些关于布尔表达式的信息,以利于可能正在为这个概念而苦苦挣扎的新开发人员。
什么是布尔表达式?
根据 Oracle 文档,“布尔表达式是 TRUE 或 FALSE 的逻辑语句。这些表达式有几种不同的形式。例如
- 布尔文本
if (true) {...}
虽然这种if语句没有真正的理由,但以上是一个有效的表达式。“如果属实,那就做卷曲牙套里的东西。”这意味着里面的东西将始终执行(使其与没有“if”相同。但是,这是理解其余部分的基础。
- 布尔变量
boolean isBlue = false;
if (isBlue) {...}
在上面的例子中,布尔表达式是变量本身。预期是,如果变量值的计算结果为 ,大括号内的内容将被执行。由于该值为 false,因此不会执行该值。上面的“如果”是更被接受的缩写形式true
boolean isBlue = false;
if (isBlue == true) {...}
因此,由于此计算的左侧(变量)值为 false,而右侧为 true,因此整个表达式的计算结果为 false。因此,大括号内的内容不会被执行(false 不等于 true)。然而
boolean isBlue = false;
if(!isBlue == true){...}
否定布尔变量会切换其值。在本例中,变量的值为 。“not” 运算符将其值切换为 。由于计算结果为 true(true 等于 true 是 true 表达式),因此将执行大括号内的内容。isBlue
false
true
true == true
- 生成布尔值的函数
public boolean isSkyBlue() {
return true; // sorry for the over simplification
}
...
if (isSkyBlue()) {...}
这只不过是我已经展示过的一种高级形式。在本例中,该方法“计算”要返回的布尔值。由于布尔值本身就是表达式,因此在括号内插入方法调用(如上图所示)是有效的。大括号内的内容将执行,只要函数返回 .true
- 比较操作
我已经包含了以下示例:
int x = 5;
int y = 3;
if (x > y) {
System.out.println("x is greater than y");
}
任何类型的比较操作都会产生 true 或 false。因此,这些比较运算是布尔表达式。这还包括重写方法的结果。例如:Object#equals(Object)
String s = "Hello";
if (s.equals("Hello")) {...}
顺便说一句,Java 中的对象应该使用重写的方法进行比较,而不是使用 double-equals 运算符(除非您只对比较对象引用(地址)是否相等感兴趣。equals()
评论