-1

英語とドイツ語をサポートする Java プログラムを作成しました。パラメータが設定されていて、それが「english」または「English」に等しい場合は、英語版を実行するメソッドを呼び出し、パラメータがない場合、または「English」または「english」に等しくない場合は、呼び出しますドイツ語版の方法。ただし、 (args[0]=="english"||args[0]=="English") は、パラメーターが何であれ、true であるべきであっても false であり、その理由がわかりません。

主な方法は次のとおりです。他の方法は重要ではないため、省略します。

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 Machine は文字列オブジェクトへのポインターを比較するため、この方法で Java の文字列を比較することはできません。正しい思いやりの使用関数を作成するには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] が null の場合、つまりあなたの場合に引数がない場合、NPE がスローされないことが保証されます。

説明: Java では、== は値がないオブジェクトを比較するため、つまり、2 つの参照が同じオブジェクトを保持しているかどうかを比較します。オブジェクトの内容は、String クラスがオーバーライドする Object クラスの equals メソッドと比較されます。

于 2013-10-19T17:40:08.520 に答える