[英]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") 是否会被正确检测为错误,因为对象输入确实是错误的。
最小可重现示例(不包括主要方法或包):
int skyB = false;
int day =2;
if (skyB == true || (day =1) != true) {
System.out.print("example text"); }
简单的答案:这不是 C++
您不能为 boolean 字段分配数值。 在 Java 中,只有两个有效值是true
和false
。 因此,您不能将 integer 值分配给 boolean 变量。
为了使您的 boolean 表达式有效,您的变量skyB
和day
必须是boolean
数据类型
boolean skyB = false
boolean day = true
if (!skyB || day) {
System.out.print("example text");
}
无需将boolean
字段与 true 或 false 进行比较即可对其进行评估。 表达式!skyB
(读作“不是 skyB”)的计算结果为false
。 所以这相当于skyB == false
。 由于该部分的计算结果为真(skyB 等于假),表达式的第二部分将被跳过并调用System.out.print()
。 如果skyB
的值更改为 true,则将评估变量day
,如果该变量的值等于 true(它是),则将执行 if 语句。
或者,您可以使用数值构建 boolean 个表达式。 如何? 简单的。 任何数学表达式的计算都是一样的。 例如:
int x = 5;
int y = 3;
if (x > y) {
System.out.println("x is greater than y");
}
基本上......你试图做的事情的逻辑(我理解它的方式)是正确的,但你的实施不是。 您不能混合使用 boolean 字段和数值。 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 为假或为第一天,则打印“示例测试”
如果表达式的任何一部分未能计算为真(即如果 skyB 为真并且 day 变量是除 1 以外的任何值),它将不会打印任何内容。
更新:
即使这个答案已被接受和投票,我还是想包含一些有关 boolean 表达式的信息,以帮助可能在这个概念上苦苦挣扎的新开发人员。
什么是 Boolean 表达式?
根据Oracle 文档,“ Boolean 表达式是逻辑语句,要么为 TRUE 要么为 FALSE。 ”这些表达式采用几个不同的 forms。例如,
if (true) {...}
虽然这样的 if 语句没有真正的原因,但上面是一个有效的表达式。 “如果为真,则执行花括号内的操作。” 这意味着里面的东西会一直执行(让它和没有“如果”一样)。但是,这是理解rest的基础。
boolean isBlue = false;
if (isBlue) {...}
在上面的例子中,Boolean 表达式就是变量本身。 期望是,如果变量值的计算结果为true
,则将执行花括号内的内容。 由于该值为 false,因此不会执行。 上面的“如果”是更容易接受的缩写形式
boolean isBlue = false;
if (isBlue == true) {...}
因此,由于此评估的左侧(变量)值为 false 而右侧为 true,因此完整表达式的评估结果为 false。 因此,花括号内的内容不会被执行(false 不等于 true)。 然而
boolean isBlue = false;
if(!isBlue == true){...}
否定 boolean 变量会切换它的值。 在这种情况下, isBlue
变量的值为false
。 “not”运算符将其值切换为true
。 由于true == true
计算结果为 true(true 等于 true 是一个 true 表达式),因此执行大括号内的内容。
public boolean isSkyBlue() {
return true; // sorry for the over simplification
}
...
if (isSkyBlue()) {...}
这只不过是我已经展示的内容的高级形式。 在这种情况下,该方法“计算”要返回的 boolean 值。 由于 boolean 值是自身的表达式,因此在括号内插入方法调用(如上图所示)是有效的。 只要 function 返回true
,花括号内的内容就会执行。
我已经包含了以下示例:
int x = 5;
int y = 3;
if (x > y) {
System.out.println("x is greater than y");
}
任何类型的比较操作都会产生 true 或 false。 因此,这些比较操作是boolean个表达式。 这也包括覆盖Object#equals(Object)
方法的结果。 例如:
String s = "Hello";
if (s.equals("Hello")) {...}
作为旁注,应该使用覆盖的equals()
方法比较 Java 中的对象,而不是使用双等号运算符(除非您只对比较 object 引用(地址)是否相等感兴趣。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.