我的代码没有正确执行if语句

时间:2014-03-17 05:45:45

标签: java if-statement

 public static void processtrans()throws FileNotFoundException{

      Scanner input = new Scanner(transFile);
      String line = input.nextLine();

      double dollar = 0;
      int transNum = 1;

      while (input.hasNextLine()) {
         int Space = line.indexOf (" ");
         int Space2 = line.indexOf (" ", Space + 1);
         String action = line.substring(0,Space);

         if (action == "ORDER"){

            int Space3 = line.indexOf (" ", Space2);
            String isbn = line.substring(Space + 1, Space2);
            int num = Integer.parseInt(line.substring(Space2 + 1, Space3));
            int custNum = Integer.parseInt(line.substring(Space3 + 1));
            System.out.println("Number= " + num);
            System.out.println("Customer number= " + custNum);
         }
         line = input.nextLine();
      }
   }

虽然我正在调试这段代码,因为它编译但没有打印任何东西,我看到它读取第一行输入分隔第一个单词并将其置于String动作中但之后它会看到动作是否为“ORDER”或不然后跳过一切我不明白为什么有人可以帮助我?

4 个答案:

答案 0 :(得分:2)

使用equals比较字符串

     if (action.equals("ORDER")){

使用==时,您正在比较String对象而不是实际字符串。

正如评论中所提到的,这个

是一个很棒的reference

答案 1 :(得分:2)

java中的==运算符会比较标识的对象(即,如果它们都引用相同的内存区域,则返回true)。为了比较相等的对象(例如,如果它们具有相同的值,则返回true),您应该使用重载的equals(Object)方法:

if (action.equals("ORDER")) {
   // ...
}

答案 2 :(得分:1)

在Java ==中检查两个引用是否在内存中引用相同的对象。要检查两个字符串对象与其内容有意义相等,您必须使用equals()方法,如下所示

if (action.equals("ORDER")){

答案 3 :(得分:0)

在Java中,如果两个对同一个Object的引用都在String对象上使用==实际上返回true。

为了检查字符串相等性,有几种方法可以做到这一点。

对象有equals(Object o)方法,通常允许您比较对象值并查看它们是否相等。

如果是字符串,

String foo = "foo";
String bar = "foo";

if(foo.equals(bar)) {
    // Hooray
}

然而,还有另一种方法可以解决这个问题。有些人建议使用字符串文字进行测试,以避免出现NullPointerException。

例如:

"foo".equals(bar);