Java getText与硬编码字符串不返回相同的结果

Java getText与硬编码字符串不返回相同的结果,java,arrays,swing,Java,Arrays,Swing,我完全被这件事难住了 如果我使用以下命令调用下面的函数: 搜索(SearchTextField.getText());//(已输入) 搜索(“玻璃纤维”);//硬编码 我得到以下结果: 我不在这里 找到了10根绳子 相同的字符串以相同的长度传递,结果不同。这怎么可能? 是的,我在==的两边都修了,运气不好 我疯了,任何帮助都将不胜感激 Test[] array = new Test[3]; array[0] = new RowBoat("Wood", "Oars", 10); array[1]

我完全被这件事难住了

如果我使用以下命令调用下面的函数:

搜索(SearchTextField.getText());//(已输入)

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

我得到以下结果:

我不在这里

找到了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");
    }
}
Test[]数组=新测试[3];
数组[0]=新划艇(“木”、“桨”,10);
阵列[1]=新动力艇(“玻璃纤维”,“舷外”,35);
阵列[2]=新帆船(“合成”、“帆”,40);
公共无效搜索(字符串搜索字符串){
布尔值=false;
System.out.print(searchString+“”+searchString.length()+“”);
for(int i=0;i
在比较字符串时使用.equals()方法。不要使用==

equals()将比较实际字符串内容,无论字符串位于内存中的什么位置

if (searchString.equals(array[i].getBoatMaterial())) {
比较字符串时使用.equals()方法。不要使用==

equals()将比较实际字符串内容,无论字符串位于内存中的什么位置

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

因为字符串变量是Java中的引用,所以在编写代码时

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

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

因为字符串变量是Java中的引用,所以在编写代码时

    if (searchString == array[i].getBoatMaterial()) {
你实际上是在比较两个指针。碰巧的是,当您在程序中的多个位置硬编码相同的字符串时,编译器会将其简化为一个实例(因为字符串是不可变的)并重用它。这就是为什么使用硬编码值会成功,因为两个指针指向相同的值。但是,当搜索字符串不是相同的硬编码“玻璃纤维”时,两个字符串位于不同的位置,比较失败。要比较两个字符串,请使用String.equals(String)方法。

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

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

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


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

Jim,如果我能给你一些信任的话,我会的。很好的解释现在完全有道理了。谢谢吉姆,如果我能给你一些信任,我会的。很好的解释现在完全有道理了。谢谢