来自另一个 class 的 Getter 不适用于 ArrayList

Getter from another class doesn't work on ArrayList

所以我一直在思考为什么我的代码不起作用。我有 2 个 classes,第一个是我的 getter 和 setter:

public class ShopItems {
  private String itemName;
  private double price;

  public double getPrice(){
    return price;
  }

  public String getItemName(){
    return itemName;
  }

  private void setPrice(p){
    price = Math.abs(p);
  }

  public ShopItems(String i, double p){
    itemName = i.toUpperCase();
    setPrice(p);
  }
}

这是我的第二个 class,我在这里制作了一个 ArrayList:

public class ShopLedger {
  private ArrayList<ShopItems> shoppingList;

  //I want to make a deep copy of the items in the parameter into shopping list.
  public ShopLedger(ArrayList<ShopItems> s){
    shoppingList = new ArrayList<ShopItems> (s);

    for(int i=0;i<s.size();i++){
      shoppingList.set(i,s.get(i));
    }
  }

  //And here is where things go wrong. I want the method to return the price of the item
  //in the parameter, and return null if the item name cannot be found.
  public Double getPrice(String itemName) {
  for(int i=0;i<shoppingList.size();i++){
    if(shoppingList.get(i).getItemName() == itemName){
      return shoppingList.get(i).getPrice();
    }
  }
  return null;
 }
}

这就是我现在所拥有的,代码一直给我错误 "java.lang.NullPointerException"。我的客户 class 将购物清单设置为: Candy(2.3), Book(20.0), Pens(5.5), Tape(10.2) itemName 是 Pens。 但是,我已经进入调试模式,出于某种原因,getPrice 方法的这一部分:

if(shoppingList.get(i).getItemName() == itemName){
      return shoppingList.get(i).getPrice();
}

从不执行。请帮忙!

我发现了这个问题,感谢一位名叫 Ajris 的用户,他指出我应该在我的 if 语句中使用 shoppingList.get(i).getItemName().equals(itemName) 而不是 shoppingList.get(i).getItemName() == itemName

您将 String 与 ==

进行比较

使用等于()。 "aaaa".equals("aaaa");

您可能想要使用 equals()。

if(shoppingList.get(i).getItemName().equals(itemName){
      return shoppingList.get(i).getPrice();
}