0

我在使用 Java Stack 时遇到了一个非常奇怪的问题。

Stack<Integer> s=new Stack(), ss=new Stack();
s.push(1024);  ss.push(1024);
System.out.println(s.peek());
System.out.println(ss.peek());
System.out.println((s.peek()==ss.peek()));
System.out.println((s.peek()<ss.peek()));
System.out.println((s.peek()<=ss.peek()));
System.out.println((s.peek()!=ss.peek()));

见上面的代码。但是为什么输出是这样的?

1024
1024
false
false
true
true

这是Java中的错误吗?有人帮忙....谢谢,凯

4

1 回答 1

7

不,这不是错误,与课程无关,完全StackInteger课程有关。了解 Integer 是一种引用类型,因此两个 Integer 可以是也可以.equal(...)不是==。了解在引用类型上使用时==检查两个对象引用是否相同,这不是您感兴趣的。equals(...)另一方面,该方法检查两个 Integer 对象持有的值是否相同,这很重要这里。这类似于我们检查字符串相等的情况。

如果你这样做了:

// convert Integers to ints and test for primitive equality:
System.out.println((s.peek().intValue() == ss.peek().intValue()));
// or test using the equals(...) method
System.out.println((s.peek().equals(ss.peek()))); 
// or test with Integer#compareTo:
System.out.println((s.peek().compareTo(ss.peek()) == 0));

你会得到:

真的
真的
真的

还要注意这个有趣的问题:为什么 128==128 在这段代码中返回 false 而 127==127 返回 true?. 答案解释了为什么==对变量的相等引用(即引用类型)的检查会Integer返回true一定范围的整数文字,如下例所示:

System.out.println((Integer) 1024 == (Integer) 1024);
System.out.println((Integer) 127 == (Integer) 127);

印刷:


于 2015-06-24T13:36:31.073 回答