基类型和引用类型的比较

public class PrimitiveQuote {
	public static void main(String[] args){
	
	Integer i01=59;
	int i02=59;
	Integer i03=Integer.valueOf(59);
	Integer i04=new Integer(59);
	Integer i05=200;
	Integer i06=Integer.valueOf(200);
	Integer i07=new Integer(59);
	
//	两个都是非new出来的Integer,如果数在-128到127之间,则是true,否则为false
	System.out.println(i01==i03);
	System.out.println(i05==i06);
//	无论如何,Integer与new Integer不会相等,不会经历拆箱过程
	System.out.println(i01==i04);
//	两个都是new出来的,都为false 
	System.out.println(i04==i07);
//	int和integer(无论new否)比,都为true,因为会把Integer自动拆箱为int再去比
	System.out.println(i02==i03);
	System.out.println(i02==i04);
	System.out.println(i01==i02);
	
	System.out.println(i03==i04);
	
}
}

输出为:

true
false
false
false
true
true
true
false

备注:

 java在编译Integer i2 = 128的时候,被翻译成-> Integer i2 = Integer.valueOf(128);而valueOf()函数会对-128到127之间的数进行缓存

class Test{
	    long width;  
	    public Test(long l) {   
	    	width = l;  
	    }  
	 public static void main(String[] args) { 
		 
		 Test a, b, c;  
		 a = new Test(42L);   
		 b = new Test(42L);   
		 c = b;   
		 long s = 42L;  
		 System.out.println(a==b);   
		 System.out.println(a==c);
//	         System.out.println(a==s); 编译不通过
	         System.out.println(b==c);
		 System.out.println(a.equals(s));
			}
}
输出为:
false
false
true
false




你可能感兴趣的:(java)