我写了一个应该支持英语和德语的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();
}
有没有人知道为什么不管我的参数不正确?
答案 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
}