Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.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 当我们使用赋值而不是比较时,如何计算if/while条件?_Java_If Statement - Fatal编程技术网

Java 当我们使用赋值而不是比较时,如何计算if/while条件?

Java 当我们使用赋值而不是比较时,如何计算if/while条件?,java,if-statement,Java,If Statement,在学习OCA/OCP for Java时,我发现了这个令人惊讶的事情 下面是if(测试条件)部分的第一段代码 让我惊讶 public class BooleanIf { public static void main(String[] args) { boolean b = false; System.out.println(Boolean.valueOf(b = true)); if (b = true) System.out.println("true

在学习OCA/OCP for Java时,我发现了这个令人惊讶的事情

下面是if(测试条件)部分的第一段代码 让我惊讶

public class BooleanIf {
public static void main(String[] args) {
    boolean b = false;
    System.out.println(Boolean.valueOf(b = true));
    if (b = true)
        System.out.println("true");
    else
        System.out.println("false");
}
现在,这一结果令人惊讶地是“真实的”

我了解到,必须有一个返回true或false的关系条件,就像
if(a>b)
if(a!=b)
一样


我想知道这件事是如何变为现实的。它是否调用Boolean.valueOf()?

这不是一个很好的做法

Boolean.valueOf(b=true),
现在关于这个问题,您应该避免这样做>

如果(b=true)

b = true;
if (b)
因此,条件总是满足的

与此类似

if (b = false)
永远不会被处决

其他信息:

这种类型的打字错误通常是由初级开发人员造成的

在发展史上,有人提出了解决方案

所谓的约达条件(像《星球大战》中的大师约达那样称呼…)

因此,在这种情况下,JODA条件是安全的,因为您可以尝试:

if (true = b) {
        // code here
    }
但这不会编译,因为投诉:

赋值的左侧必须是变量


关于这个想法有多好,代码是否更易于阅读,等等,争议仍然存在。

这不是一个很好的实践

Boolean.valueOf(b=true),
现在关于这个问题,您应该避免这样做>

如果(b=true)

b = true;
if (b)
因此,条件总是满足的

与此类似

if (b = false)
永远不会被处决

其他信息:

这种类型的打字错误通常是由初级开发人员造成的

在发展史上,有人提出了解决方案

所谓的约达条件(像《星球大战》中的大师约达那样称呼…)

因此,在这种情况下,JODA条件是安全的,因为您可以尝试:

if (true = b) {
        // code here
    }
但这不会编译,因为投诉:

赋值的左侧必须是变量


关于这个好主意的争议仍然悬而未决,代码是否更易于阅读,等等。

=
是赋值运算符,
=
是比较运算符

但是

不仅将
y
中的值赋给变量
x
,而且还返回该值

正因为如此,我们可以做一些事情,比如
x=(y=1)
(我们甚至可以在这里放上括号),将
1
赋值给变量
y
,然后返回
1
,并将其赋值给
x

因此,也可以编写类似于
if(b=true)
的代码,其中
true
将被分配给
b
,然后由
if(…)
返回并使用。换句话说,如果(true){b=true;.}那么它将始终从
true
分支执行代码


如何避免这种打字错误?
  • 省略
    ==true
    ==false
    部分

    • if(b==true)
      的情况下,我们可以编写
      if(b)
      ,因为
      (b==true)
      将始终给出与
      b
      中存储的aleady相同的结果
    • if(b==false)
      的情况下,我们可以编写
      if(!b)
  • ==
    的左侧使用值而不是变量
    换句话说,如果(true==b){..},则使用
    。即使我们错误地编写了
    =
    而不是
    =
    ,我们最终将得到
    true=b
    ,这将导致编译错误,因为我们无法为
    true
    这样的值赋值。我们只能给变量赋值


  • =
    是赋值运算符,
    =
    是比较运算符

    但是

    不仅将
    y
    中的值赋给变量
    x
    ,而且还返回该值

    正因为如此,我们可以做一些事情,比如
    x=(y=1)
    (我们甚至可以在这里放上括号),将
    1
    赋值给变量
    y
    ,然后返回
    1
    ,并将其赋值给
    x

    因此,也可以编写类似于
    if(b=true)
    的代码,其中
    true
    将被分配给
    b
    ,然后由
    if(…)
    返回并使用。换句话说,如果(true){b=true;.}
    那么它将始终从
    true
    分支执行代码


    如何避免这种打字错误?
    • 省略
      ==true
      ==false
      部分

      • if(b==true)
        的情况下,我们可以编写
        if(b)
        ,因为
        (b==true)
        将始终给出与
        b
        中存储的aleady相同的结果
      • if(b==false)
        的情况下,我们可以编写
        if(!b)
    • ==
      的左侧使用值而不是变量
      换句话说,如果(true==b){..},则使用
      。即使我们错误地编写了
      =
      而不是
      =
      ,我们最终将得到
      true=b
      ,这将导致编译错误,因为我们无法为
      true
      这样的值赋值。我们只能给变量赋值


    如果
    需要布尔型表达式

    布尔变量的类型为。。。布尔型


    那么,如果将布尔变量放在if后面,可能会发生什么呢?

    if
    需要布尔类型的表达式

    布尔变量的类型为。。。布尔型


    那么,如果将布尔变量放在if后面,可能会发生什么情况呢?

    让我们从查看
    if
    语句的结构开始:

    if ( <boolean-expression> ) {
        ...
    }
    
    接下来,让我们看一看
    if (b = list.isEmpty()) {
        ...
    }