Java 为什么我的开关箱在这里工作,但如果不工作?

Java 为什么我的开关箱在这里工作,但如果不工作?,java,if-statement,arraylist,switch-statement,Java,If Statement,Arraylist,Switch Statement,我正在学习如何使用列表,在下面的示例中,switch case可以工作,但(我认为)等价的if语句不能工作。你能告诉我为什么吗 public class Kapitel14 { public static void main(String[] args) { ArrayList<String> testList = new ArrayList<String>(); testList.add("Cousin"); testList.add("Do

我正在学习如何使用列表,在下面的示例中,switch case可以工作,但(我认为)等价的if语句不能工作。你能告诉我为什么吗

public class Kapitel14 {

public static void main(String[] args) {

    ArrayList<String> testList = new ArrayList<String>();
    testList.add("Cousin");
    testList.add("Doof");
    testList.add("Dorf");
    testList.add("Dortmund");
    testList.add("Franz");
    System.out.println(listCount(testList));
}

public static int listCount(ArrayList<String> newList) {

    int capDCounter = 0;
    for (String element : newList) {
        String firstLetter = Character.toString(element.charAt(0));
        switch (firstLetter) {
            case ("D"):
                capDCounter++;
                break;

            default:
                continue;
        }

        //if I use this instead it returns wrong results:
        //if (firstLetter == "D") 
        //  capDCounter++;
    }
    return capDCounter;
}
公共类Kapitel14{
公共静态void main(字符串[]args){
ArrayList testList=新的ArrayList();
添加(“表亲”);
添加(“Doof”);
添加(“Dorf”);
添加(“多特蒙德”);
添加(“Franz”);
System.out.println(listCount(testList));
}
公共静态int-listCount(ArrayList-newList){
int capDCounter=0;
for(字符串元素:newList){
String firstLetter=Character.toString(element.charAt(0));
开关(第一个字母){
个案(D):
capDCounter++;
打破
违约:
继续;
}
//如果使用此选项,则返回错误的结果:
//如果(第一个字母=“D”)
//capDCounter++;
}
返回capDCounter;
}
使用

而不是

if (firstLetter == "D") 
          capDCounter++;

.equals()
方法应该在这里使用,因为你想比较字符串的值。

谢谢!是不是因为我的版本会将第一个字母的地址与“D”进行比较?显然是的。但我会将它们称为引用而不是地址。顺便说一句,这与C/C++非常相似。你可以用“D”代替“D”。
if (firstLetter == "D") 
          capDCounter++;