我正在尝试搜索一个arraylist并返回一个对象。我有一个Vehicle类,其中我有一个名为search的方法,作为参数,注册号和arraylist作为参数传递。
然而问题是,当经历每个系统时,系统永远不会尝试比较2个字符串(注册号),因此该方法总是返回一个空对象。
方法:
public Vehicle search(String id, List<Vehicle> myList) {
Vehicle currenctVeh = new Vehicle();
for(Vehicle v: myList)
{
if(v.regNo == id)
{
currenctVeh = v;
}
}
return currenctVeh;
}
被叫:
Vehicle searchVeh = new Vehicle();
String regNum = JOptionPane.showInputDialog(null, "Enter Vehicle Registration Number");
searchVeh.search(regNum, allVehicles);
System.out.println(searchVeh.toString());
答案 0 :(得分:2)
使用equals
比较字符串,而不是==
。
==
会起作用,但是对象存在差异:
==
检查变量是否引用相同的对象。equals
检查变量引用的对象是否相同(取决于这些对象的equals的具体实现)。你需要这个:
if(v.regNo.equals(id))
{
currenctVeh = v;
}
此外,您不需要将currenctVeh初始化为新车辆,这就足够了:
Vehicle currenctVeh = null;
答案 1 :(得分:1)
使用v.regNo.equals(id)
或者比较是在同一地址的对象之间,而不是应该发生的相同值的对象。
答案 2 :(得分:0)
如果您可以保证其中一个不会为空,请使用field1.equalsIgnoreCase(field2)
或使用可以使用StringUtils.equalsIgnoreCase(field1,field2)
答案 3 :(得分:0)
public Vehicle search(String id, List<Vehicle> myList) {
for(Vehicle v: myList)
{
if(v.regNo.equals(id))
{
return v;
}
}
// You should decide what to return in case of vehicle no found
return null;
// return new Vehicle();
}
答案 4 :(得分:0)
使用equals()
而不是==
至于String
等于等于检查它的内容并且==检查参考
答案 5 :(得分:0)
通过在Java中使用==
比较两个字符串,您将检查您要比较的2个变量是否指向同一个对象,如果它们具有相同的字符串值,则不是。
如果要检查字符串内容是否相等,则必须使用方法equals
。
if(v.regNo.equals(id)){.....}
例如:
String s1 = new String("Test");
String s2 = new String("Test");
s1 == s2
会将false
结果作为表达式,
虽然s1.equals(s2)
会提供true
。
注意:字符串常量保存在Java中的常量“池”中,
保持唯一常量的结构。因此,“测试”==“测试”表达式将给出true
,
因为我们必须在“池”中使用相同的常量。