每个Java - 通过ArrayList搜索

时间:2014-04-10 21:36:12

标签: java arraylist foreach

我正在尝试搜索一个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());

6 个答案:

答案 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, 因为我们必须在“池”中使用相同的常量。