我完全被这个困扰了...
如果我使用以下内容调用以下函数:
搜索(SearchTextField.getText()); //(输入玻璃纤维)
搜索( "玻璃纤维"); //硬编码
我得到以下结果:
玻璃纤维10不在这里
发现玻璃纤维10串!
相同的String传递的长度相同,结果不同.怎么会这样?是的我在==的两边修剪它没有运气.
我在失去理智,任何帮助都会受到赞赏.
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");
}
}
Run Code Online (Sandbox Code Playgroud)
在比较字符串时使用.equals()方法.不要使用==
equals()将比较实际的String内容,无论String驻留在内存中的哪个位置.
if (searchString.equals(array[i].getBoatMaterial())) {
Run Code Online (Sandbox Code Playgroud)
由于String变量是Java中的引用,因此在编写代码时
if (searchString == array[i].getBoatMaterial()) {
Run Code Online (Sandbox Code Playgroud)
你实际在做的是比较两个指针.碰巧的是,当您在程序中的多个位置对相同的字符串进行硬编码时,编译器会将其缩减为一个实例(因为字符串是不可变的)并重用它.这就是使用硬编码值成功的原因,因为两个指针都指向相同的值.但是,当搜索字符串与硬编码的"玻璃纤维"不同时,两个字符串位于不同的位置,并且比较失败.要比较两个字符串,请使用String.equals(String)方法.