在Java中整数比较是棘手的,因为int和Integer表现不同.我得到那个部分.
但是,正如此示例程序所示,(Integer)400 (第4行)的行为与(Integer)5 (第3行)不同.为什么是这样??
import java.util.*;
import java.lang.*;
import java.io.*;
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
System.out.format("1. 5 == 5 : %b\n", 5 == 5);
System.out.format("2. (int)5 == (int)5 : %b\n", (int)5 == (int)5);
System.out.format("3. (Integer)5 == (Integer)5 : %b\n", (Integer)5 == (Integer)5);
System.out.format("4. (Integer)400 == (Integer)400 : %b\n", (Integer)400 == (Integer)400);
System.out.format("5. new Integer(5) == (Integer)5 : %b\n", new Integer(5) == (Integer)5); …Run Code Online (Sandbox Code Playgroud) 下面的Java代码返回true
Integer i1=1;
Integer i2=1;
System.out.println(i1==i2);
Run Code Online (Sandbox Code Playgroud)
那么我们在Java中使用String文字常量池的概念的方式,在Java中包装类的情况下我们是否也有类似的概念?
我写了简单的代码:
public static void main(String[] args) {
Integer i1 = 127;
Integer i2 = 127;
boolean flag1 = i1 == i2;
System.out.println(flag1);
Integer i3 = 128;
Integer i4 = 128;
boolean flag2 = i3 == i4;
System.out.println(flag2);
}
Run Code Online (Sandbox Code Playgroud)
但是,奇怪的是,结果如下:
true
false
Run Code Online (Sandbox Code Playgroud)
你能解释一下为什么会出现这种差异吗?
这是正确的(Integer) 1 == (Integer) 1,这似乎是合法的.
那么为什么它要进行(Integer) 222平等游览 呢?
布尔值会自动装箱到同一个实例吗?
我有一个小测试表明确实如此,但我不会对此下任何赌注。有保证吗?
@Test
public void autoboxBooleans() {
Multimap<Boolean, Integer> ids = HashMultimap.create();
for (int i = 0; i < 10; i++) {
Boolean rand = ThreadLocalRandom.current().nextBoolean();
ids.put(rand, System.identityHashCode(rand));
}
System.out.println(ids); // {false=[453523494], true=[2024918163]}
}
Run Code Online (Sandbox Code Playgroud)
注意:这个问题讨论的是 0-127 范围之外的整数。
我知道我正在比较参考,而我正在使用==这不是一个好主意,但我不明白为什么会发生这种情况.
Integer a=100;
Integer b=100;
Integer c=500;
Integer d=500;
System.out.println(a == b); //true
System.out.println(a.equals(b)); //true
System.out.println(c == d); //false
System.out.println(c.equals(d)); //true
Run Code Online (Sandbox Code Playgroud) 我使用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()));
Run Code Online (Sandbox Code Playgroud)
见上面的代码.但为什么输出是这样的?
1024
1024
false
false
true
true
Run Code Online (Sandbox Code Playgroud)
这是Java中的错误吗?有人帮忙....谢谢,凯
Integer a = 127;
Integer b = 127;
System.out.println(a == b);
Run Code Online (Sandbox Code Playgroud)
结果是真的,但是:
Integer a = 128;
Integer b = 128;
System.out.println(a == b);
Run Code Online (Sandbox Code Playgroud)
结果是错误的.为什么?
Integer v1_1 = 127;
Integer v1_2 = 127;
Integer v2_1 = 128;
Integer v2_2 = 128;
System.out.println(v1_1 == v1_2);//true
System.out.println(v2_1 == v2_2);//false
Run Code Online (Sandbox Code Playgroud)
为什么第二个表达是假的?
我无法弄清楚价值如何影响比较结果.