在Java中将Stack值与String进行比较

时间:2013-08-16 11:47:39

标签: java comparison stack boolean

我正在尝试以下代码:

import java.util.Stack;
public class HelloWorld{

 public static void main(String []args){
    Stack s=new Stack();
    s.push(5-4);
    s.push(9);
    s.push(51);
    if(s.get(1).equals("9"))
        System.out.println("yes its comparable");
    System.out.println(s.get(1));

 }
}

实际输出是:

9

我希望输出为:

yes its comparable
9

我无法弄明白。我已经尝试了s.get(1)==“9”但它也不起作用。这可能背后的关键是什么?它们都不是字符串吗?或者一个是字符串一是对象,但它们仍然具有可比性。有人可以开导我吗?

5 个答案:

答案 0 :(得分:7)

9是一个整数。 "9"是一个字符串。

s.get(1).equals("9"); // false
s.get(1).equals(9); // true

答案 1 :(得分:3)

9Integer"9"String

因此他们并不平等。

答案 2 :(得分:3)

您正在比较两种不同的类型 - StringInteger。在Stack中使用引用类型可以防止这种混淆

Stack<Integer> s=new Stack<Integer>();

使用原始类型

Stack s=new Stack();

导致使用对象类型,例如

s.push(5-4);
调用

,将其自动装箱为Integer类型。然后是表达式

s.get(1).equals("9"))

评估为false,因为equals方法在进行比较之前检查类型

if (obj instanceof Integer) {
   return value == ((Integer)obj).intValue();
}
return false;

答案 3 :(得分:3)

  if(s.get(1).equals("9"))
  System.out.println("yes its comparable");  //This prints when if condition datisfied
  System.out.println(s.get(1)); // This is run always

确保使用括号

 if(condition){
    // if satisfied condition execute this 

   }

我认为你期待的代码是

    if(s.get(1).equals(9)) // use int value not String 
        {
            System.out.println("yes its comparable");
            System.out.println(s.get(1));
        }

答案 4 :(得分:2)

堆栈中的

9(整数)和“9”(字符串)不相等。 要比较它们使用:

s.get(1).toString().equals("9")

s.get(1).equals(Integer.parseInt("9"))