2014-01-11 128 views
0

我是相对较新的编码一般和遇到问题,我到处寻找帮助,但我无法找到这个问题。它将如果有人能告诉我为什么字符串“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); 

回答

1

字符串的工作就像在Java对象。

如果你这样做stringA == stringB这将始终返回false,因为stringA和stringB是不同的对象。

比较字符串需要使用stringA.equals(stringB)来完成,并且这应该返回true(如果值匹配)。

+0

AHAHAHAHAHA哇。我可以说这不是我第一次做这个吗?十分感谢你的帮助 – user3183938

0

Chris 7你说得对,字符串是对象,但新的编译器对这些字符串做了一些优化,可能发生的情况是stringA == stringB是相等的,但它没有被承诺。所以你应该总是使用字符串比较函数(String.equals或String.equalsIgnoreCase)。

顺便说一下,您可以优化您的代码。使用仅实现一个功能但不多于...的功能外部化的功能来检查,如果一个人的卡或不:

boolean playerHas(String s) { for (PlayerCard card : playerCards) { ... } return false; } 
0

== 

运算符比较对象,而

.equals 

函数比较对象的值。

String foo = "loremipsum"; 
String bar = "loremipsum"; 
System.out.println(foo == bar); 
System.out.println(foo.equals(bar)); 
0

==比较位,它的工作原理与基本变量,因为当你声明基本变量它保存在其位的值,但是当你声明引用变量,它只有两个参考是相同的工作。

见这个例子:

String object1 = new String("hola"); 
String object2 = object1; 
System.out.print(object1==object2); 

这将返回true因为对象2具有指向上堆相同对象的相同位,因为当我说,他们复制:object2 = object1

所以,如果你想要通过值来比较对象,而不是参考您必须使用:equals()方法。