public class AandB
{
public static void main(String[] args)
{
Integer a=new Integer(5);
Integer b=new Integer(5);
if(a>=b&&b>=a&&a!=b)
{
System.out.println("通过!");
}
}
}
为什么a>=b&&b>=a&&a!=b为真??
{
public static void main(String[] args)
{
Integer a=new Integer(5);
Integer b=new Integer(5);
if(a>=b&&b>=a&&a!=b)
{
System.out.println("通过!");
}
}
}
为什么a>=b&&b>=a&&a!=b为真??
//对比一下反编译的源代码://Java代码
int value = 100;
Integer a = Integer.valueOf(value);
Integer b = Integer.valueOf(value);
System.out.println((new StringBuilder()).append(a).append("==").append(b).append(" ? ").append(a == b).toString());
int value = 300;
Integer a = Integer.valueOf(value);
Integer b = Integer.valueOf(value);
System.out.println((new StringBuilder()).append(a).append("==").append(b).append(" ? ").append(a == b).toString()); int value = 100;
Integer a = Integer.valueOf(value);
Integer b = Integer.valueOf(value);
System.out.println((new StringBuilder()).append(a).append("==").append(b).append(" ? ").append(a == b).toString());
int value = 300;
Integer a = Integer.valueOf(value);
Integer b = Integer.valueOf(value);
System.out.println((new StringBuilder()).append(a).append("==").append(b).append(" ? ").append(a == b).toString());//看看JDK5的源代码:
//Java代码
public static Integer valueOf(int i) {
final int offset = 128;
if (i >= -128 && i <= 127) { // must cache
return IntegerCache.cache[i + offset];
}
return new Integer(i);
} 請繼續
{ public CompareAction()
{
} public static void main(String args[])
{
Integer a = new Integer(5);
Integer b = new Integer(5);
if(a.intValue() >= b.intValue() && b.intValue() >= a.intValue() && a != b)
{
System.out.println("\u901A\u8FC7!");
}
}
}唯独没重载= != 这个在类对象存在的情况下,调用 hashcode 和 equal 方法来断定
b>=a也是比较a,b的值
a!=b默认是不是同一个对象,你没有重写object的equal,hashcode方法的话,所以a,b是两个对象,指向不同的hashcode,所以不相同!所以 a>=b&&b>=a&&a!=b 结果为true.
不是
Integer a = 256;
Integer b = 256;
或者
Integer a = 56;
Integer b = 56;然后 a == b的问题。所以1楼的东西答非所问。
楼主的问题
Integer a = new Integer(5);
Integer b = new Integer(5);
a >= b 成立是因为 a.intValue() >= b.intValue()成立
同样 a <= b也是这个原因。
最后一个 a != b,是比较两个对象的地址,显然你 new 了两个对象,肯定不一样了!
因为LZ你new出来的是对象,
对象是通过地址来比较的,每个对象地址都不同
所以a!=b 成立
因为a和b都是new出来的,两个对象在堆中的位置根本就不同,所以引用a和引用b的值肯定就不同了啊