myidentity
myidentity
2010-12-31 08:35

为啥判断boolean值的时候用 value == false 的形式而不直接取反

已采纳

我看到很多第三方开源代码中都有下面类似的代码:
1.public static boolean isNumeric(String str) {

2. if (str == null) {

3. return false;

4. }

5. int sz = str.length();

6. for (int i = 0; i < sz; i++) {

7. if (Character.isDigit(str.charAt(i)) == false) {

8. return false;

9. }

10. }

11. return true;

12. }

我想问的就是 if (Character.isDigit(str.charAt(i)) == false), 为什么很多代码判断 true 还是 false的时候都用 "== false" 的形式,而不写成 if (!Character.isDigit(str.charAt(i))) {...} 的形式,两者具体有什么区别?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

9条回答

  • beneo beneo 11年前

    java代码是有compile变成class,然后在jvm里面运行的
    [code="java"]
    public class CompileDemo {

    public void demo() {
        if (isDigit() == false) {
    
        }
    }
    
    public void demo2() {
        if (!isDigit()) {
    
        }
    }
    
    public boolean isDigit() {
        return true;
    }
    

    }
    [/code]

    编译以后,用javap -l -s -v CompileDemo,可以看出

    [code="java"]
    public void demo();

    Code:
    Stack=1, Locals=1, Args_size=1
    0: aload_0
    1: invokevirtual #2; //Method isDigit:()Z
    4: ifne 7
    7: return

    public void demo2();

    Code:
    Stack=1, Locals=1, Args_size=1
    0: aload_0
    1: invokevirtual #2; //Method isDigit:()Z
    4: ifne 7
    7: return
    [/code]

    这2个方法其实是一模一样的。

    (Character.isDigit(str.charAt(i)) == false)与(!Character.isDigit(str.charAt(i)))就是代码可读性的问题了。。。我自己也觉得前者更易读一些

    点赞 评论 复制链接分享
  • songfantasy songfantasy 11年前

    2.3中的确是是楼主说的,我刚才那个是反编译的,没有看到。

    public static boolean isNumeric(String str) {
    if (str == null) {
    return false;
    }
    int sz = str.length();
    for (int i = 0; i < sz; i++) {
    if (Character.isDigit(str.charAt(i)) == false) {
    return false;
    }
    }
    return true;
    }

    点赞 评论 复制链接分享
  • songfantasy songfantasy 11年前

    我刚才看了一下源码,用的是common-lang.2.3.jar版本。直接写的。

    public static boolean isNumeric(String str)
    {
    if(str == null)
    return false;
    int sz = str.length();
    for(int i = 0; i < sz; i++)
    if(!Character.isDigit(str.charAt(i)))
    return false;

        return true;
    }
    
    点赞 评论 复制链接分享
  • CaiHuajiang CaiHuajiang 11年前

    我就不习惯使用boolean==false。
    因为如果你是这样子写
    boolean v = Character.isDigit(str.charAt(i));
    if(v==false){}
    被误写成if(v=false)那就麻烦了

    点赞 评论 复制链接分享
  • songfantasy songfantasy 11年前

    其实作用是一样的,只能可读性提高了。

    点赞 评论 复制链接分享
  • lang_shao lang_shao 11年前

    [quote]
    能否解释的更清楚一点,什么情况下把“==”写成了“=”,编译器不会报错
    [/quote]

    C和C++才会这样,JAVA是会报错的.

    点赞 评论 复制链接分享
  • beneo beneo 11年前

    [quote]你常常会有某种不可预知的失误,把“==”写成了“=”,那么编译器不会报错[/quote]
    能否解释的更清楚一点,什么情况下把“==”写成了“=”,编译器不会报错

    点赞 评论 复制链接分享
  • zgy52188 zgy52188 11年前

    从运算结果上来说呢,没有什么区别。在这里有一个编程的习惯。
    但是编程的时候,你常常会有某种不可预知的失误,把“==”写成了“=”,那么编译器不会报错,因为编译器会认为这是一个赋值运算,而不是布尔运算。这个是高手经验得来的结果。
    好的代码就是让程序更加结实而已。

    点赞 评论 复制链接分享
  • lang_shao lang_shao 11年前

    没什么区别。程序员水平或习惯问题。"== false"比较直观,但没有必要,不这样写性能会好一点点,但这一点性能忽略不记,无关紧要。

    点赞 评论 复制链接分享

相关推荐