我正在Java中创建一个侧面项目,其中Mobile将存储应用程序列表(ArrayList)和单独的UI类来处理所有输入/输出和业务相关逻辑。问题出在以下Mobile类块中:
public App searchApp(String name)
{
System.out.println(list);
for(App app: list) {
String appName = app.getName();
if(appName == name)
{
return app;
}
}
throw new IllegalStateException();
}
此功能允许用户在列表中搜索应用。以下是从用户那里获取搜索输入的方法:
public String inputSearch()
{
System.out.println("Enter app name to search: ");
return sc.nextLine().trim();
}
以下是UI类显示结果的方式:
public void choices(int choice)
{
switch(choice)
{
case 1:
String[] input = inputDetails();
mobile.addApp(input[0], input[1]);
break;
case 2:
String s = inputSearch();
App found = mobile.searchApp(s);
System.out.println("App found in search:");
System.out.println(found.toString());
break;
and so on...
问题在于searchApp。
我无法弄清楚为什么条件不起作用,即使打印时appName和name都可以看作是相同的(在两种字符串类型上也使用了trim()但仍然没有成功)。
答案 0 :(得分:0)
由于name
是String
,您需要使用.equals()
来检查相等性(而不是==
)。使用==检查它们是完全相同的对象,但使用equals
检查它们的内容是否相同。
所以正确的方法是:
if(appName.equals(name))
{...
答案 1 :(得分:0)
虽然上面的答案指出了主要问题,但仍然可以通过执行类似
之类的操作来使用一些显式/隐式空值检查来改进StringUtils.equals(appName, name).
否则,如果appName为null,您将获得一个丑陋的NullpointerException; - )