java == 和equals()

==

== 是运算符    
1 :可以使用在基本数据类型变量和引用数据类型变量当中
2: 如果比较的是基本数据类型变量,比较两个变量保存的数据是否相等(不一定类型相同)
   如果比较的是引用数据类型变量, 比较两个对象的地址值是否相等, 即两个引用是否指向同一个实体

 

equals()

equals()方法是Object类中所带有的  因为所有类都直接或间接的继承了Object类所以所有类有equals()
  一: 是一个方法而非运算符
  二: 只能适用于引用数据类型
  三:Object类中的定义
  public boolean equals(Object obj){
      return  (this==obj);
  }
  说明Object中equals()和==是相同的  判断
当比较的是引用数据类型时  == 和equals的作用是相同的
四: String  Date, File,包装类都重写了根父类的equals()方法,重写之后比较的不是引用地址是否相同,而是比较的    两个对象的"实体内容"是否相同  

五: 通常情况下,我们自定义的类如果使用equals()的话,也通常是比较两个对象的"实体内容"是否相等.那么我们如果想比较两个对象的值的时候就要在类中重写equals()方法了   

 

总结:

== 比的是地址值


equals() 比的是内容值


== 使用必须保证左右两边类型一致

 

 

 

 

 

Once类

public class Once {
    String name = "老王";
    int  age = 18;

    public Once(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public  Once(){}
}

 

Tes类

public class Test {
    String name = "老王";
    int age = 17;
}

TestEquals类

public class TestEquals {


    public static void  main(String [] args){
        Once once = new Once();
        Test test = new Test();
        Once once1 = new Once("隔壁老王",   19);
        Once once2 = new Once("隔壁老李", 23);
        System.out.println(once.equals(test));  //false
        System.out.println(once.name.equals(test.name));  // true  String重写了  equals()方法
        System.out.println(once1.equals(once2)); // false 因为引用数据类型的是对比所有的属性
    }
    
}

 

重写equals

重写Test类中的equals方法

在Test类中重写 equals()



    @Override
    public boolean equals(Object object){
        
        if(this == object){
            return true;
        }
        
        
        if(object instanceof Test){
            Test test = (Test) object; //强制转为相同类
//            if(this.age == ((Test) object).age && this.name.equals(((Test) object).name)){  //因为基本数据类型必须用==
//                return true;
//            }else{
//                return false;
//            }
            //上面也可以用着一段
            //return (this.age == ((Test) object).age && this.name.equals(((Test) object).name));  
return this.age == test.age && this.name.equals(test.name); }
return false; }

 

 

 

练习:

 

1.编写Order类,有int型的orderId,String型的orderName,相应的 getter()和setter()方法,两个参数的构造器,重写父类的equals()方法: public boolean equals(Object obj),并判断测试类中创建的两个对象是否 相等。
2.请根据以下代码自行定义能满足需要的MyDate类,在MyDate类中覆盖 equals方法,使其判断当两个MyDate类型对象的年月日都相同时,结果 为true,否则为false。 public boolean equals(Object o)
 public class EqualsTest {
public static void main(String[] args) {
MyDate m1 = new MyDate(14, 3, 1976); MyDate m2 = new MyDate(14, 3, 1976); if (m1 == m2) {
System.out.println("m1==m2"); } else {
System.out.println("m1!=m2"); // m1 != m2 }
if (m1.equals(m2)) {
System.out.println("m1 is equal to m2");// m1 is equal to m2
} else {
System.out.println("m1 is not equal to m2");
} }
}

 

 

 

//1.编写Order类,有int型的orderId,String型的orderName,
// 相应的 getter()和setter()方法,两个参数的构造器,
// 重写父类的equals()方法: public boolean equals(Object obj),并判断测试类中创建的两个对象是否 相等。


public class ORder {

    int orderId;
    String orderName;


    public  int getOrderId(){
        return orderId;
    }
    public void  setOrderId(int orderId){
        this.orderId = orderId;
    }


    public String getOrderName(){
        return getOrderName();
    }

    public  void  setOrderName(String orderName){
        this.orderName = orderName;
    }

    public   ORder(){

    }


    public  ORder(String orderName, int orderId){
        this.orderName = orderName;
        this.orderId = orderId;
    }


    @Override
    public boolean equals(Object object){
        if(object == this){
            return true;
        }
        if( object instanceof ORder ){
            ORder oRder = (ORder) object;
            if(this.orderId == ((ORder) object).orderId && this.orderName.equals(((ORder) object).orderName)){
                return true;
            }

        }

        return false;
    }
}








2:


//请根据以下代码自行定义能满足需要的MyDate类,在MyDate类中覆盖 equals方法,
// 使其判断当两个MyDate类型对象的年月日都相同时,结果 为true,否则为false

public class EqualsTest {

    public static void main(String[] args) {
        MyDate m1 = new MyDate(14, 3, 1976);
//        MyDate m2 = new MyDate(14, 3, 1976);
        MyDate m3 = new MyDate(13,8,1986);
        if (m1 == m3) {
            System.out.println(111);
            System.out.println("m1==m2");
        } else {
            System.out.println(2222);
            System.out.println("m1!=m2"); // m1 != m2 }
            if (m1.equals(m3)) {
                System.out.println("m1 is equal to m2");// m1 is equal to m2
            } else {
                System.out.println("m1 is not equal to m2");
            }
        }
    }
}



public class MyDate {
    int age;
    int monty;
    int day;


    public MyDate(int age, int monty, int day) {
        this.age = age;
        this.monty = monty;
        this.day = day;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getMonty() {
        return monty;
    }

    public void setMonty(int monty) {
        this.monty = monty;
    }

    public int getDay() {
        return day;
    }

    public void setDay(int day) {
        this.day = day;
    }


    @Override
    public boolean equals(Object obj){
        if(this == obj){
            return true;
        }
        if(obj instanceof  MyDate){
            MyDate myDate = (MyDate) obj;
            if(this.age == myDate.age && this.day == myDate.day && this.monty == myDate.monty){
                return true;
            }else{
                return false;
            }

        }
        return false;
    }
}
解答

 

转载于:https://www.cnblogs.com/zhaoyunlong/p/11547414.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值