我正在尝试以下代码:
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“,但它也不起作用。这背后的关键是什么?他们都不是弦乐吗?或者一个是字符串,一个是对象,但它们仍然是可比较的。有人能给我一点启发吗?
发布于 2013-08-16 11:49:15
9
是一个整数。"9"
是一个字符串。
s.get(1).equals("9"); // false
s.get(1).equals(9); // true
发布于 2013-08-16 11:49:23
9
是Integer
,"9"
是String
。
因此他们是不平等的。
发布于 2013-08-16 11:50:43
您正在比较两种不同的类型- 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;
https://stackoverflow.com/questions/18272614
复制相似问题