-1

我编写了一个应该支持英语和德语的 Java 程序。如果设置了一个参数并且如果它等于“english”或“English”,它应该调用一个执行英文版本的方法,如果没有参数或者它不等于“English”或“english”,它应该调用德文版的方法。但是, (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();
}

有没有人知道为什么它不会是真的,不管我的参数是什么?

4

3 回答 3

3

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

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

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

args[0].equalsIgnoreCase("English")

==用于对象引用比较。不要用它来比较值。

于 2013-10-19T17:39:59.213 回答
0

您不能以这种方式比较 Java 中的字符串,因为 Java Machine 比较指向字符串对象的指针。要做出正确的同情使用功能equals

if( "english".equalsIgnoreCase( args[0] ) ) {
    // English language
}
于 2013-10-19T17:42:56.933 回答
0

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

args[0].equalsIgnoreCase("English")

它将比较“英语”和“英语”。

更好的版本是

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

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

说明:因为在Java 中,== 比较对象不存在值,即两个引用是否持有相同的对象。对象内容与 String 类覆盖的 Object 类的 equals 方法进行比较。

于 2013-10-19T17:40:08.520 回答