【发布时间】:2014-07-29 11:42:29
【问题描述】:
我有一个问题,我试图将一个对象的名称(字符串)与另一个字符串进行比较,我尝试使用 .equals() 和 ==,但在我的情况下似乎都不起作用。
我现在的代码是:
public boolean checkingObjectName(String checkName)
{
for (int i=0; i<count; i++) //where 'count' has a value of 3
{
if (product[i].getName().equals(checkName)) //where product[i] has been initialised
{
return true;
}
else
{
return false;
}
}
}
程序总是返回 false,即使设置为product[i] 的名称与给定的参数相同。我已经尝试查看与 .equals() 和 == 以及其他字符串引用相关的其他问题,但我没有找到与我的问题相关的任何东西。
我看到人们使用compareTo(),但我不确定我的代码中是否有必要这样做,我也不完全确定如何使用它。
编辑: 正如 Houssni 在 cmets 中所说,我刚刚意识到 return 语句结束了循环和方法。是否可以在第一次检查后不终止方法的情况下检查每个产品的名称,并让它返回一个布尔值?
编辑 2:我已将代码修改为所提供答案的说法,即:
public boolean checkingObjectName(String checkName)
{
for (int i=0; i<count; i++) //where 'count' has a value of 3
{
if (product[i].getName().equals(checkName)) //where product[i] has been initialised
{
return true;
}
}
return false;
}
product[i].getName() 不等于 checkName 并且该方法返回 false,即使它们应该相等,我仍然遇到同样的问题。关于为什么会发生这种情况的任何可能性,因为我查看了我的代码但我不确定。
编辑 3: 与上述代码块相关的唯一其他代码是来自另一个类的参数的输入,即:
String checkName = JOptionPane.showInputDialog("Enter the name: ");
while (storingProducts.checkingObjectName(checkName) == false) //assume for storingProducts
{
JOptionPane.showMessageDialog(null, "No products were found. Please re-input name.");
checkName = JOptionPane.showInputDialog("Enter the name: ");
storingProducts.checkingObjectName(checkName);
}
if (storingProducts.checkingObjectName(checkName) == true)
//extra code
所以,这就是与我的问题相关的所有代码。我仍然不确定为什么该方法返回false,尽管这两个值都接收到相同的字符串值。
编辑 4: product 和 count 来自使用 checkingObjectName 方法的类:
public class Store
{
private Product[] product; //Product is another class that just sets and gets
private int count=3;
public Store()
{
product = new Product[count];
for (int i=0; i<count; i++)
{
product[i] = new Product();
}
//extra code
解决方案
我解决了这个问题:我没有使用.equals(),而是尝试使用.equalsIgnoreCase(),它成功了。
【问题讨论】:
-
将所有代码发布到您测试它的位置并初始化产品数组
-
如果只循环一次,为什么还要循环呢? return 语句终止循环和方法。
-
如果 !product[0].getName().equals(checkName) 循环停止并且方法返回 false
标签: java string object methods equals