Java:字符串字面量的行为不同于字符串变量(不能来自实习)



我有以下代码:

public RecordList searchDatabase(String key, String value)
{
    String newKey;
    newKey = key; // no results
    //newKey = "name_of_person"; // finds results
    //newKey = new String("name"); // no results
    //newKey = new String(key); // no results
    //newKey = new String(key.getBytes().clone()); // no results
    System.out.println(newKey.equals("name_of_person"));
    return database.search(newKey, value);
}

它应该用键和值搜索数据库,但是它什么也没找到。但是,如果我将键更改为字符串字面值(第一个注释行),它会找到正确的结果。我尝试了其他一些东西(其他注释行),但都不起作用。println总是输出true。

我搜索了类似的问题,似乎实习是字符串比较问题的常见原因。但在这种情况下,唯一有效的情况是当我传递字符串字面值时,所以如果实习是问题,那么数据库必须在其源中将该字段作为字符串字面值。我搜索了一下,文字"name_of_person"没有出现在源代码的其他地方(它是从JSON动态创建的)。

如果重要的话,数据库。搜索函数是org.apache.lucene.search.join.JoinUtil。createJoinQuery,问题在于它的第二个参数toField。

有两种合理的解释:

  1. database对象类的search()方法使用==来比较key参数与"name_of_person",而不是equals()
  2. 键值有尾随空格字符,如尾随空白

试试这个:

key = key.trim();

最新更新