在Java中声明布尔变量的正确方法是什么?

时间:2012-10-20 19:43:31

标签: java variables boolean

我刚开始学习Java。在我关注的在线课程中,我被要求尝试以下代码:

String email1 = "meme@me.coh";
String email2 = "meme@me.com";
Boolean isMatch = false;

isMatch = email1.equals (email2);

if (isMatch == true){
    System.out.println("Emails match");
}
else{
    System.out.println("Emails don't match");
}

我不明白为什么在下一行我被要求宣布isMatch为假时我正在比较电子邮件地址并将值分配给isMatch
我尝试过以下代码,它们看起来效果相同:

String email1 = "meme@me.coh";
String email2 = "meme@me.com";
Boolean isMatch;

isMatch = email1.equals (email2);

if (isMatch == true){
    System.out.println("Emails match");
}
else{
    System.out.println("Emails don't match");
}

在课程中,它没有解释为什么我首先声明isMatch为假。在比较电子邮件地址之前,我是否有必要将isMatch声明为false?

6 个答案:

答案 0 :(得分:12)

不仅没有必要首先将其声明为false,我还会添加其他一些改进:

  • 使用boolean代替Boolean(也可以无理由地null

  • 在声明期间分配:

    boolean isMatch = email1.equals(email2);
    
  • ...如果可以,请使用final关键字:

    final boolean isMatch = email1.equals(email2);
    

最后但并非最不重要:

if (isMatch == true)

可表示为:

if (isMatch)

使isMatch标志无效,内联它可能不会影响可读性。我建议在那里寻找一些更好的课程/教程......

答案 1 :(得分:7)

你不必,但是有些人喜欢显式初始化所有变量(我也这样做)。特别是那些使用各种语言编程的人,更容易拥有始终初始化变量的规则,而不是逐个语言地逐个语言地决定。

例如,Java具有Boolean,int等的默认值。另一方面,C不会自动给出初始值,除非您自己明确指定值,否则无论发生在内存中的是什么都是最终的结果。 / p>

在上面的例子中,正如您所发现的那样,代码也可以在没有初始化的情况下工作,因为变量是在下一行中设置的,这使得它看起来特别多余。有时您可以组合这两行(声明和初始化 - 如其他一些帖子中所示)并获得两种方法中的最佳方法,即使用email1.equals (email2);操作的结果初始化您的变量。

答案 2 :(得分:2)

没有理由这样做。实际上,我会选择将声明和初始化结合起来,如

final Boolean isMatch = email1.equals (email2);

使用final关键字,以便您之后无法更改(意外)。

答案 3 :(得分:1)

首先,你不应该使用它们。您正在使用wrapper类型,如果您具有基本类型,则很少使用该类型。 所以,你应该使用boolean而不是。

此外,我们将boolean变量初始化为false以保留初始默认值false。如果您已将其声明为实例变量,则会自动将其初始化为false

但是,无论您是否指定默认值,它都完全取决于您。我宁愿在声明时初始化它们。

但是如果您立即分配给您的变量,那么您可以直接为其赋值,而无需定义default值。

所以,在你的情况下,我会像这样使用它: -

boolean isMatch = email1.equals (email2);

答案 4 :(得分:1)

在您的示例中,您不需要。作为标准编程实践,所有变量都在某个代码块中引用,例如try{} catch(){},并且被引用在块之外,你需要首先在try块之外声明变量,例如

当你的equals方法调用抛出一些异常时,这很有用,例如NullPointerException;

     boolean isMatch = false;

     try{
         isMatch = email1.equals (email2);
      }catch(NullPointerException npe){
         .....
      }
      System.out.print("Match=="+isMatch);
      if(isMatch){
        ......
      }

答案 5 :(得分:0)

如Levon所述,这不是强制性的,如文档中所述: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

这可能是其他语言的习惯,不能保证原始数据类型的默认值。