package com.wo;import java.util.ArrayList;
import java.util.List;import android.app.Activity;
import android.os.Bundle;
import android.util.Log;public class WoActivity extends Activity {
    List<Point> n=new ArrayList<Point>();
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        n.add(new Point(1,1));
        if(n.contains(new Point(1,1))){
            Log.v("contains", "contains");
        }
    }
    class Point{
        public Point(int x, int y) {
            super();
            this.x = x;
            this.y = y;
        }        int x,y;
        
    }
}
为什么没有输出contains....

解决方案 »

  1.   

    你没有为Point类定义equals方法,所以从Object继承的equals方法 所以只有在Point对象与contains(n)里的n是同一个对象的时候才会返回true 
    是否明白?
      

  2.   


    非常的准确,意思就是说虽然你new出了2个类,这2个类也是一样的值,但是n.contains(new Point(1,1))比较的不是这2个point的值是不是相等,而是比较的这2个类的引用是否相等复习下基础javase吧
      

  3.   

    覆盖equals貌似挺麻烦,要满足自反性,一致性,传递性...一堆约定。
    还得覆盖hashCode,稍微不符合约定,就有麻烦呀。