Java 为什么我的开关箱在这里工作,但如果不工作?
我正在学习如何使用列表,在下面的示例中,switch case可以工作,但(我认为)等价的if语句不能工作。你能告诉我为什么吗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
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++;