繁体   English   中英

将 int 初始化与 boolean 运算符比较 if 语句参数

[英]Comparing an int initialization with a boolean operator for an if statement parameter

我已经声明了 ints skyBday ,并写下了这一行:

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 中,只有两个有效值是truefalse 因此,您不能将 integer 值分配给 boolean 变量。

为了使您的 boolean 表达式有效,您的变量skyBday必须是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。例如,

  • Boolean 文字
if (true) {...}

虽然这样的 if 语句没有真正的原因,但上面是一个有效的表达式。 “如果为真,则执行花括号内的操作。” 这意味着里面的东西会一直执行(让它和没有“如果”一样)。但是,这是理解rest的基础。

  • Boolean 个变量
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 表达式),因此执行大括号内的内容。

  • 产生 boolean 值的函数
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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM