Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java堆栈peek()行为_Java_Stack_Peek - Fatal编程技术网

Java堆栈peek()行为

Java堆栈peek()行为,java,stack,peek,Java,Stack,Peek,以下代码返回除-128和127之间的所有值之外的false。有什么特别的原因吗?我知道我必须使用equals,因为peek()返回对对象的引用,但我很好奇为什么它只适用于上述范围的值 public boolean test(int x) { Stack<Integer> s1 = new Stack<Integer>(); Stack<Integer> s2 = new Stack<Integer>(); s1.push(x

以下代码返回除-128和127之间的所有值之外的
false
。有什么特别的原因吗?我知道我必须使用
equals
,因为
peek()
返回对对象的引用,但我很好奇为什么它只适用于上述范围的值

public boolean test(int x) {
    Stack<Integer> s1 = new Stack<Integer>();
    Stack<Integer> s2 = new Stack<Integer>();
    s1.push(x);
    s2.push(x);
    return (s1.peek() == s2.peek());
}
公共布尔测试(int x){
堆栈s1=新堆栈();
堆栈s2=新堆栈();
s1.推(x);
s2.推(x);
返回(s1.peek()==s2.peek());
}

原因有两个:

  • 自动装箱
  • 事实是
当您使用autobox时,
s1.push(x)
对于某些
intx
将转换为
s1.push(Integer.valueOf(x))
。因为这是一个缓存的值,所以对于这些值中的任何一个,都会重用同一个实例


根据JRE的实现,
Integer
的缓存也可能比JRE的缓存大——但不要依赖于此;)

这有两个原因:

  • 自动装箱
  • 事实是
当您使用autobox时,
s1.push(x)
对于某些
intx
将转换为
s1.push(Integer.valueOf(x))
。因为这是一个缓存的值,所以对于这些值中的任何一个,都会重用同一个实例

根据JRE的实现,
Integer
的缓存也可能比JRE的缓存大——但不要依赖于此;)

在队列中

s1.push(x);
s2.push(x);
原语
intx
使用自动装箱到
Integer
实例中(java自己做这件事)。该方法使用缓存来存储-127到128范围内的
整数
实例,这意味着对于所有其他
int
值,将在上面两行代码中创建一个新实例,从而导致
=
比较返回false。

s1.push(x);
s2.push(x);

原语
intx
使用自动装箱到
Integer
实例中(java自己做这件事)。该方法使用缓存来存储-127到128范围内的
Integer
实例,这意味着对于所有其他
int
值,将在上述两行代码中创建一个新实例,导致比较返回false。

Integer
缓存介于-128和127之间的值以提高性能。请参阅此
Integer
缓存介于-128和127之间的值以提高性能。请参阅此