java - 我应该如何订购 if 语句?

标签 java c++ c

<分区>

[我以为这个问题已经有人问过了,但我找不到答案]。

在编写 if 语句时,我要比较的东西应该放在第一位还是第二位? (我对 C/C++Java 特别感兴趣)。

重要吗,还是只是风格? (惯例似乎是“首先是变量,其次是值”)。

考虑以下代码:

#include <iostream>

int main() {
    int x = 5;

    if ( 5 == x ) {
        std::cout << "X == 5, true." << std::endl;
    }
    if ( x == 5 ) {
        std::cout << "5 == X, true." << std::endl;
    }

    return 0;
}

哪些输出:

X == 5, true.
5 == X, true.

所以看起来没有任何区别。我缺少一些微妙之处吗?

最佳答案

这些被称为 Yoda Conditions据我所知,主要思想是防止意外分配(即你不能分配给文字)。

是的,值得一提的是,像 if (a = 5) 这样的东西 a 不是 bool 在诸如Java(虽然在 C/C++ 中可以),但正如维基百科文章所指出的那样,它仍然可以防止不需要的行为:

它还可以解决某些类型的不安全空行为。

String myString = null;
if (myString.equals("foobar")) { /* ... */ }
// This causes a NullPointerException in Java

使用 Yoda 条件:

String myString = null;
if ("foobar".equals(myString)) { /* ... */ }
// This is false, as expected

关于java - 我应该如何订购 if 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17606030/

相关文章:

java Jackson 解析 json 数组

java - 如何迭代 Java 枚举?

c# - 在 C# 中编写 C++ std::reverse 等效项的最接近方法是什么?

c++ - 一维数组的操作

c++ - 在 C/C++ 中避免内存泄漏的方法

c - 在 C 中读取二进制文件的奇怪之处

java - 使用 PDFBox 合并两个文件后如何在 pdf 中保留签名?

java - 在 hql 中使用 select * 但获取值的地址

c++ - fatal error LNK1158 : cannot run 'mt.exe'

c - 为什么堆栈内存 "cheaper"而不是 C 中的堆内存?