==和equals

java中测试两个变量相等有两种方法:==和equals

1.当使用==时,如果  两个变量是基本数据类型变量,且都是数值类型(不严格要求数据类型相同),则只需要两者的变量的值相等,就返回true

                      如果  是两个引用类型的变量,他们必须只想指向一个对象时,==判断才会返回true(==不可用于比较类型上没有父子关系的两个变量)

2.当使用equals时,equals是用来比较引用类型值相等的,对于8大基本数据类型,是有重写Objdect中的equals方法

   在Object中equals方法和==一样

Object中equals方法
public boolean equals(Object obj) { return (this == obj); }

 在8大基本类型中,重写了equals方法

Integer重写Object的equals方法
public boolean equals(Object obj) { if (obj instanceof Integer) { return value == ((Integer)obj).intValue(); } return false; }

 所以对于8大基本类型对应的包装类,我们可以放心的用==来比较对象相等,用equals来比较对象的值相等。8大基本类型我们直接用==比较值是否相等

         int i=8;
         int j=8;
         System.out.println(i==j);//基本数据类型比较  ==         
         Integer a=new Integer(8);
         Integer b=new Integer(8);
         System.out.println("a=b:"+(a==b)); //基本类型对应的包装类比较  ==(是否指向同一个对象)
System.out.println("a.equal:"+a.equals(b));//equals 对象的值时候相等

 我们知道:所有的类都继承自Object。即使我们自己写的类也是继承自Object,自己写的类在调用equals方法时,实际是调用Object类的equals方法,

但是这个方法和“==”是一样的,都是用来判断对象是否一致,这时我们如何判断对象对应的值是一致呢?

答案是:重写父类的equals方法(这里我们指自定义类的父类Object)

class EqualsTest {
	public int k;

	public EqualsTest(int k) {
		this.k = k;
	}
	public boolean equals(EqualsTest test) {
	  if(k==test.k)
		  return true;
	  else
		  return false;
	}
}


public class Test {
	/**
	 * 自定義類,重寫equals方法測試
	 * @param args
	 */
	public static void main(String[] args) {
		// TeODO Auto-generated method stu
       EqualsTest testA=new EqualsTest(9);
       EqualsTest testB=new EqualsTest(9);
       System.out.println(testA==testB);//false
System.out.println(testA.equals(testB));//true
} }

 总结:

     1.基本数据类型用 == 比较两个变量的value值是否相等

     2.基本类型对应的包装类,用 ==比较两个对象是否相等,用equals比较两个对象的value是否相等

       对于自定义类型,用 == 比较两个对象是否相等(同一个对象),通过重的equals方法来实现value(或者其他)是否一致

 

     补充:八大基本数据类型及其包装类

             基本数据类型      对应包装类

                  int      Integer

                  short              Short

                  long       Long

                  String     String

       boolean    Boolean

       char     Character

                  float     Float

                  double    Double

 

posted @ 2013-12-13 10:41  Jackvin  阅读(278)  评论(0编辑  收藏  举报