Java .getText与Hard Coded String不返回相同的结果

时间:2009-11-20 04:55:51

标签: java arrays swing

我完全被这个困扰了。 。

如果我使用以下内容调用以下函数:

搜索(SearchTextField.getText()); //(输入玻璃纤维)

搜索( “玻璃纤维”); //硬编码

我得到以下结果:

玻璃纤维10不在这里

发现玻璃纤维10串!

传递相同的字符串,长度相同,结果不同。怎么会这样? 是的我在==的两边修剪它没有运气。

我失去了理智,任何帮助都会受到赞赏。

Test[] array = new Test[3];
array[0] = new RowBoat("Wood", "Oars", 10);
array[1] = new PowerBoat("Fiberglass", "Outboard", 35);
array[2] = new SailBoat("Composite", "Sail", 40);




    public void Search(String searchString) {

    boolean found = false;
    System.out.print(searchString + " " + searchString.length() + " ");

    for (int i = 0; i < array.length; i++) {

        if (searchString == array[i].getBoatMaterial()) {
            found = true;
            break;
        }
    }
    if (found) {
        System.out.println("String found!");
    } else {
        System.out.println("Not Here");
    }
}

3 个答案:

答案 0 :(得分:6)

在比较字符串时使用.equals()方法。不要使用==

equals()将比较实际的String内容,无论String驻留在内存中。

if (searchString.equals(array[i].getBoatMaterial())) {

答案 1 :(得分:5)

由于String变量是Java中的引用,因此当您编码

    if (searchString == array[i].getBoatMaterial()) {

你实际做的是比较两个指针。碰巧的是,当您在程序中的多个位置对相同的字符串进行硬编码时,编译器会将其缩减为一个实例(因为字符串是不可变的)并重用它。这就是使用硬编码值成功的原因,因为两个指针都指向相同的值。但是,当搜索字符串与硬编码的“玻璃纤维”不同时,两个字符串位于不同的位置,并且比较失败。要比较两个字符串,请使用String.equals(String)方法。

答案 2 :(得分:3)

使用String.equals(String other)函数来比较字符串,而不是==运算符。

该函数检查字符串的实际内容,==运算符检查对象的引用是否相等。