为什么某个布尔值是假的,虽然它应该是真的?

时间:2013-10-19 17:38:49

标签: java

我写了一个应该支持英语和德语的Java程序。如果设置了一个参数并且它等于“英语”或“英语”,它应该调用一个执行英语版本的方法,如果没有参数或者它不等于“英语”或“英语”,它应该调用德语版的方法。 但是,(args [0] ==“english”|| args [0] ==“English”)无论我的参数是什么都是假的,即使它应该是真的,我也不知道为什么会这样。

这是主要方法,其他方法并不重要,所以我会把它们留下。

public static void main(String[] args){
boolean input=args.length==1;
System.out.println(input);
boolean mode = false;
if (input) mode=args[0]=="English"||args[0]=="english";
System.out.println(mode);
if(input&&mode) english();
else german();
}

有没有人知道为什么不管我的参数不正确?

3 个答案:

答案 0 :(得分:3)

使用equals()方法进行字符串值比较。

args[0].equals("English")||args[0].equals("english")

甚至更好(在这种情况下)

args[0].equalsIgnoreCase("English")

==用于对象参考比较。不要用它来比较这些值。

答案 1 :(得分:0)

字符串不应与==进行比较,而应与equals方法进行比较。 使用

args[0].equalsIgnoreCase("English")

它将比较两者,“英语”和“英语”。

更好的版本是

"English".equalsIgnoreCase(args[0]);

这将确保,如果args [0]为空,即在你的情况下没有参数,它将不会抛出NPE。

解释:因为在Java中,==比较没有值的对象,即两个引用是否持有相同的对象。对象内容与Object类的equals方法进行比较,String类重写。

答案 2 :(得分:0)

您无法以这种方式比较Java中的字符串,因为Java Machine会比较指向字符串对象的指针。为了做出正确的同情,请使用函数equals

if( "english".equalsIgnoreCase( args[0] ) ) {
    // English language
}