我正在尝试以下代码:
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”但它也不起作用。这可能背后的关键是什么?它们都不是字符串吗?或者一个是字符串一是对象,但它们仍然具有可比性。有人可以开导我吗?
答案 0 :(得分:7)
9
是一个整数。 "9"
是一个字符串。
s.get(1).equals("9"); // false
s.get(1).equals(9); // true
答案 1 :(得分:3)
9
是Integer
,"9"
是String
。
因此他们并不平等。
答案 2 :(得分:3)
您正在比较两种不同的类型 - String
和Integer
。在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"))