不能得到JOptionPane字符串输入匹配字符串值
问题描述:
我是相对较新的编码一般和遇到问题,我到处寻找帮助,但我无法找到这个问题。它将如果有人能告诉我为什么字符串“s”不等于永远字符串“TEMP”即使我键入正确的数字是极大的赞赏。不能得到JOptionPane字符串输入匹配字符串值
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);
答
字符串的工作就像在Java对象。
如果你这样做stringA == stringB这将始终返回false,因为stringA和stringB是不同的对象。
比较字符串需要使用stringA.equals(stringB)来完成,并且这应该返回true(如果值匹配)。
答
Chris 7你说得对,字符串是对象,但新的编译器对这些字符串做了一些优化,可能发生的情况是stringA == stringB是相等的,但它没有被承诺。所以你应该总是使用字符串比较函数(String.equals或String.equalsIgnoreCase)。
顺便说一下,您可以优化您的代码。使用仅实现一个功能但不多于...的功能外部化的功能来检查,如果一个人的卡或不:
boolean playerHas(String s) { for (PlayerCard card : playerCards) { ... } return false; }
答
的
==
运算符比较对象,而
.equals
函数比较对象的值。
String foo = "loremipsum";
String bar = "loremipsum";
System.out.println(foo == bar);
System.out.println(foo.equals(bar));
答
这==
比较位,它的工作原理与基本变量,因为当你声明基本变量它保存在其位的值,但是当你声明引用变量,它只有两个参考是相同的工作。
见这个例子:
String object1 = new String("hola");
String object2 = object1;
System.out.print(object1==object2);
这将返回true
因为对象2具有指向上堆相同对象的相同位,因为当我说,他们复制:object2 = object1
所以,如果你想要通过值来比较对象,而不是参考您必须使用:equals()
方法。
AHAHAHAHAHA哇。我可以说这不是我第一次做这个吗?十分感谢你的帮助 – user3183938