==与equals问题非常容易混淆,为了弄清楚这个问题,博主专门研究了一下。
下面从代码开始讲起:
public static void main(String[] args) {
//1.==和equals问题
Integer s=new Integer(9);
Integer t=new Integer(9);
Integer ss=s;
Long u=new Long(9);
System.out.println("s==t: "+(s==t));
System.out.println("s==new Integer(9): "+(s==new Integer(9)));
System.out.println("s.equals(9): "+s.equals(9));
System.out.println("s.equals(t): "+s.equals(t));
System.out.println("s.equals(u): "+s.equals(u));
System.out.println("s==ss: "+(s==ss));
System.out.println("================================");
Integer s1=new Integer(899);
Integer t1=new Integer(899);
Long u1=new Long(899);
System.out.println("s1==t1: "+(s1==t1));
System.out.println("s1==new Integer(899): "+(s1==new Integer(899)));
System.out.println("s1.equals(899): "+s1.equals(899));
System.out.println("s1.equals(t1): "+s1.equals(t1));
System.out.println("s1.equals(u1): "+s1.equals(u1));
}
大家先想想代码中的两次结果执行的情况是不是一样的?
//运行出的结果如下:
s==t: false
s==new Integer(9): false
s.equals(9): true
s.equals(t): true
s.equals(u): false
s==ss: true
================================
s1==t1: false
s1==new Integer(899): false
s1.equals(899): true
s1.equals(t1): true
s1.equals(u1): false
说明一点:
引用1 == 引用2 ,当两个引用的地址相等时,返回true,;否则返回false. 注意 : 与引用指向的数据值无关。
引用1.equals(引用2),当两个引用指向的数据相等时,返回true;否则返回false.