1

次のコードでは、下のブロックif(timesout[entry] == "exit")は決して実行されません。現在のループがデバッグモードで「終了」として設定されていることを確認timesout[entry]しました。また、if ステートメントが評価される前に変数を出力することによっても確認しましたが、何があってもexit、プロンプトで入力するとブロックが実行されず、なぜだか途方に暮れています。

import java.util.Scanner;

public class timetracker {
public static void main(String args[]) {
    boolean exit = false;
    String[] reasons = new String[30];
    String[] timesout = new String[30];
    String[] timesin = new String[30];
    int entry = 0;
    Scanner keyinput = new Scanner(System.in);

    recordloop:
    while(exit == false) {
        //record info



        System.out.println("Enter time out:");
        timesout[entry] = keyinput.nextLine();

        if(timesout[entry] == "exit") {
            exit = true;
            break recordloop;   
        }

        System.out.println("Enter reason:");
        reasons[entry] = keyinput.nextLine();
        System.out.println("Enter time in:");
        timesin[entry] = keyinput.nextLine();

        entry = entry + 1;

    }

    System.out.println("Times away from phone:\n ----- \n");
    int count = entry;
    entry = entry + 1;

    while(count < entry) {
        System.out.println(reasons[count] + ": " + timesout[count] + " - " + timesin[count] + "\n");
        count = count + 1;
    }
}
}
4

3 に答える 3

9
timesout[entry] == "exit"

equals()文字列を比較するために使用し、==参照の等価性を比較します

見る

于 2012-09-03T05:46:39.040 に答える
4

それ以外の

if(timesout[entry] == "exit") 

使用する

if(timesout[entry].equals("exit"))

また

if("exit".equals(timesout[entry]))

== と equals() の間で異なる詳細情報

 http://stackoverflow.com/questions/12171783/how-is-it-possible-for-two-string-objects-with-identical-values-not-to-be-equal/12171818#12171818 
于 2012-09-03T05:47:17.587 に答える