面试题:==和equals()的区别
==:运算符
1.可以使用在基本数据类型和引用数据类型变量中
 2.如果比较的是基本数据类型变量:比较两个变量保存的数据是否相等(不一定类型要相同)
 如int i=10; double j=10.0;则i==j返回true;
 3.如果比较的是引用数据类型的变量:比较的是两个对象的地址在是否相同,即两个引用是否指向堆区的同一个空间
 如Person p1 = new Person(“TOM”,18);Person p2 = new Person(“TOM”,18);但是p1==p2返回false;
equals()方法使用:
1.是一个方法,而非运算符
 2.只能适用于引用数据类型
 3.Object类中equals()和==一样的,都是比较地址
 4.像String,Date,File,包装类等都重写了Object类中的equals()方法,他们比较的是两个对象的内容是否相同,而不是比较地址。
 5.我们自定义的类如果使用equals()的话,也通常是比较两个对象的内容是否相同,而不是地址,那么我们需要对equals()进行重写
class Person{
            String name;
            int age;
            //override
            public boolean equals(Object obj){
                if(this == obj){
                    return true;//如果地址相同,则直接返回true
                }
                if(obj instanceof Person){//判断obj是否是Person类型的,如果是,再比较,不是的话直接返回false
                    Person p = (Person)obj;//如果obj是Person类型的,则强转成Person类型
                    //比较两个对象的每个属性
                    if(this.name.equals(p.name) && this.age == p.age){//必须写成this.name.equals(p.name),不能写成this.name == p.name;因为这样就又成比较name的地址了
                        return true;
                    }
                }
                return false;
            }
        }
 
自动生成equals()方法

 










