我对编码总体上比较新,并遇到了一个问题,我到处寻求帮助,但我找不到这个问题。如果有人能告诉我为什么字符串“s”不等于字符串“temp”,即使我输入了正确的数字,也会非常感激。
String s = null;
do{
s = (String) JOptionPane.showInputDialog(null, "Select a card to check for (Jacks = 11, Queens = 12, Kings = 13)", "Player's Turn", JOptionPane.PLAIN_MESSAGE, null, null, "Pick a card");
System.out.println(s);
for(int x = 0; x < PlayerCards.size(); x++){
String temp = PlayerCards.get(x).getFace();
if(s == temp){
playerhas = true;
}
}
if(s == null || playerhas != true){
JOptionPane.showMessageDialog(null, "Please pick a card you have.", "Error", JOptionPane.INFORMATION_MESSAGE);
}
}while(s == null || playerhas != true);
答案 0 :(得分:1)
字符串像Java中的对象一样工作。
如果你执行stringA == stringB,这将始终返回false,因为stringA和stringB是不同的对象。
比较字符串需要使用stringA.equals(stringB)来完成,这应该返回true(如果值匹配)。
答案 1 :(得分:0)
Chris 7你是对的,字符串是对象,但是新的编译器对这些字符串进行了一些优化,并且可能发生stringA == stringB相等但不承诺。所以你应该总是使用字符串比较函数(String.equals或String.equalsIgnoreCase)。
顺便说一下,您可以优化代码。使用仅实现一个功能而不是更多功能的功能...外部化您的功能,检查是否有卡:
boolean playerHas(String s) { for (PlayerCard card : playerCards) { ... } return false; }
答案 2 :(得分:0)
==
运算符比较对象,而
.equals
函数比较对象值。
String foo = "loremipsum";
String bar = "loremipsum";
System.out.println(foo == bar);
System.out.println(foo.equals(bar));
答案 3 :(得分:0)
这个==
比较位,它适用于原始变量,因为当你声明一个原始变量时,它会以位为单位保存它的值,但是当你声明一个引用变量时,它只有在两个引用相同时才有效。
见这个例子:
String object1 = new String("hola");
String object2 = object1;
System.out.print(object1==object2);
这将返回true
,因为object2具有指向堆上相同对象的相同位,因为当我说:object2 = object1
因此,如果您想按值而不是通过引用比较对象,则必须使用:equals()
方法。