我已经得到了以下代码,除了命令行参数之外,每次我写"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 ]");
}
答案 0 :(得分:5)
如果您将if语句更改为
,则==
与.equals
混淆
if ("Insertion".equals(args[1]) || "Merge".equals(args[1])) {
你应该得到预期的结果。
在Java中,==
操作采用LHS值并将其直接与RHS值进行比较,这适用于int
,double
等原始类型。字符串是虽然有点不同。因为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]
的可能性。