我刚开始学习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?
答案 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
这可能是其他语言的习惯,不能保证原始数据类型的默认值。