equals方法与“==”的用法区别

一、equals方法与“==”的区别

"= ="操作符比较的是值【变量(栈)内存中存放的对象的(堆)内存地址】,也就是用于比较变量所对应的堆内存中所存储的数值是否相同

equal用于比较两个对象的值是否相同【不是比地址】

【特别注意】 Object类中的equals方法和“==”是一样的,没有区别,而String类,Integer类等等一些类,是重写了equals方法,才使得equals和“==不同”。对于基础数据类型来说,没有重写equals方法,故两者是一样。

二、在不同数据类型时,其两者的差别

1. 基础数据类型

public class Demo {
    public static void main(String[] args) {
        //对于基本类型的变量。"==""equal"的区别
        int t1=57;
        int t2=67;
        int t3=124;
        int t4=124;
        //“==”对于基本数据类型,判断两个变量的值是否相等。
        Boolean result1=(t1==t2);
        Boolean result2=((t1+t2)==t3);
        Boolean result3=(t3==t4);
        System.out.println(result1);
        System.out.println(result2);
        System.out.println(result3);
 
        //“equal”不能用于基本数据类型。只能用于类变量。对于基本数据类型要用其包装类。
        Integer i1=new Integer(t1);
        Integer i2=new Integer(t2);
        Integer i3=new Integer(t3);
        Integer i4=new Integer(t4);
 
        System.out.println("【i1.equals(i2)】"+i1.equals(i2));
        System.out.println("【i3.equals(i1+i2)】"+i3.equals(i1+i2));
        System.out.println("【i3.equals(i4)】"+i3.equals(i4));
    }
}

结果:

	false
	true
	true
	false
	true
	true

2. String数据类型

public class Demo {
    public static void main(String[] args) {
        String str1 = "Hello";
        String str2 = new String("Hello");
        String str3 = str2; // 引用传递
        System.out.println(str1 == str2); // false
        System.out.println(str1 == str3); // false
        System.out.println(str2 == str3); // true
        System.out.println(str1.equals(str2)); // true
        System.out.println(str1.equals(str3)); // true
        System.out.println(str2.equals(str3)); // true
    }
}

3. Ojbect数据类型

如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存(堆内存),变量也占用一块内存(栈内存),例如Objet obj = new Object();变量obj是一个内存,new Object()是另一个内存,此时,变量obj所对应的内存中存储的数值就是Object()对象占用的那块堆内存的首地址。对于指向对象类型的变量,如果要比较两个变量是否指向同一个对象,则要看这两个变量所对应的内存中的数值是否相等,这时候就需要用==操作符进行比较。

1)如果没有重写对象的equals方法,直接对比,则是跟 == 一样的方法

@Test
public void testEquals(){
    System.out.println("application ....................");
    User u = new User("xiaozheng","123456");
    User u1 = new User("xiaozheng","123456");
    System.out.println(u.equals(u1));
    System.out.println(u == u1);
 
}



结果:
	false
	false

默认情况下,如果不重写equals方法,其是与“ ==”的方法一样 ,比较对象的值是否一样

2)重写了对象的equals方法:

@Override
public boolean equals(Object obj) {
    //如果内存地址相等,那么一定是同一个对象,就无需比较两个对象的属性值
    if(this==obj){
        return true;
    }
    //判断obj是否为Baboon类型的实例
    if(obj instanceof User){
        User b = (User)obj;//强制转换
        if(!this.username.equals(b.username)){
            return false;
        }else if(!this.password.equals(b.password)){
            return false;
        }
        return true;
    }else{
        return true;
    }
}

@Test
public void testEquals(){
    System.out.println("application ....................");
    User u = new User("xiaozheng","123456");
    User u1 = new User("xiaozheng","123456");
    System.out.println(u.equals(u1));
    System.out.println(u == u1);

结果:
	true
	false

转载于:https://blog.csdn.net/xiaozhegaa/article/details/84065922

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值