Java输入来自终端的奇怪行为

时间:2018-04-03 11:37:26

标签: java shell command-line args

我已经得到了以下代码,除了命令行参数之外,每次我写"Insertion"它都不会进入if语句,因此输出将是{{1} }

"Algorithm not found. Use: [ Insertion | Merge ]"

在命令行中输入这个,我做错了什么?

  public static void main(String[] args) throws IOException, InsertionAndMergeException, Exception {
    if( args.length < 2 ) {
      System.out.println("Use: <path> <algorithm> ");
      System.exit(1);
    }

    if(args[1] == "Insertion" || args[1] == "Merge"){

      testWithComparisonFunction(args[0], args[1], new RecordComparatorIntField());

    }else
      System.out.println("Algorithm not found. Use: [ Insertion | Merge ]");
  }  

1 个答案:

答案 0 :(得分:5)

如果您将if语句更改为

,则==.equals混淆
if ("Insertion".equals(args[1]) || "Merge".equals(args[1])) {

你应该得到预期的结果。

在Java中,==操作采用LHS值并将其直接与RHS值进行比较,这适用于intdouble等原始类型。字符串是虽然有点不同。因为String实际上是一个字符数组,所以它存储为Object,因此==运算符会将指针与LHS / RHS进行比较(在这种情况下)不相等。)

您可以使用以下代码观察看似奇怪的行为:

String a = "Test.";
String b = "Test.";
System.out.println(a == b); // true
System.out.println(a.toLowerCase() == b.toLowerCase()); // false

这是由于一个称为“字符串实习”的过程,它有效地在同一个指针下存储多个字符串,但它们具有相同的值。

另请注意,通过将字符串文字放在比较中的第一位,如果NullPointerException不存在,则删除args[1]的可能性。