Val*_*uyt 1 java integer minimum
我用以下字段创建了一个Interval类:
...
private static final Integer MINF = Integer.MIN_VALUE;
Integer head,tail;
...
Run Code Online (Sandbox Code Playgroud)
当我创建这个类的实例,制作this.head = Integer.MIN_VALUE,并且我想检查head的值是否相等时MINF,它表示它们不相等.
Interval i = new Interval(Integer.MIN_VALUE,10);
System.out.println(i.toString()); //[-2147483648,10]
Run Code Online (Sandbox Code Playgroud)
所以我继续尝试打印这些值,
public String toString() {
...
//What the hell?
System.out.println("MINF == Integer.MIN_VALUE: " + (MINF == Integer.MIN_VALUE)); //true
System.out.println("MINF == this.head: " + (MINF == this.head)); //false
System.out.println("Integer.MIN_VALUE == this.head: " + (Integer.MIN_VALUE == this.head)); //true
...
return "*insert interval in format*";
}
Run Code Online (Sandbox Code Playgroud)
哪个说
MINF == Integer.MIN_VALUE是真的
MINF == this.head虽然是假的this.head = -2147483648
Integer.MIN_VALUE == this.head是真的
我错过了为什么第二个是假的?
Integer是包装类,Object的子类,包含一个int值.
如果仅使用基本类型int,==则进行数值比较而不是对象地址比较.
介意Integer.MIN_VALUE当然int也是.
小智 6
您错过了这样的事实:当存储在Integer中(即,将Integer.MIN_VALUE存储在两个不同的整数中)并在它们之间使用==时,比较不是值,而是对象.对象不相同,因为它们是两个不同的对象.当每个对象与Integer.MIN_VALUE进行比较时,由于Integer.MIN_VALUE是一个int,因此该对象被自动装箱并使用int比较进行比较.