关于equals和"=="的区别:
equals方法是Integer类中重载Object类的equals方法,Object类中的equals方法用来判断两个对象变量所指的是否为同一个对象。经重载后,equals方法用来判定两个Integer对象是否具有相同的int值,若相同,返回结果为true。
"=="运算符用于比较两个变量本身的值,即两个对象在内存的首地址。换句话说,用于比较两个类类型的变量是否指向同一个对象。但存在一个特殊情况:-128至127内的Interger都是同一个对象引用。如下:
public class Test
{
public static void main(String args[])
{
Integer t1 = 100;
Integer t2 = 100;
if (t1==t2)
{
System.out.println("t1==t2");
}
else
{
System.out.println("t1!=t2");
}
Integer t3 = 200;
Integer t4 = 200;
if (t3==t4)
{
System.out.println("t3==t4");
}
else
{
System.out.println("t3!=t4");
}
}
}
输出结果为:t1= =t2
t3! =t4
这是因为:Integer t1=0;相当于Integer t1=Integer.valueOf(0);
Integer中valueOf代码如下:
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);
}
注意:Integer t1 = new Integer(100); Integer t2 = new Integer(100);t1,t2分别指向两个Integer对象。