Java中equals()方法和双等号“==”的区别

Java中equals()方法和双等号“==”的区别

  1. 双等号==
    如果比较的是基本数据类型的变量,比较的是其赋值的内容是否相等,如果比较的是引用类型的变量,则比较的是所指向的对象的地址是否相等。
  2. equals()方法
    equals方法不能用来比较基本数据类型的变量。默认情况下equals()比较的也是对象的地址是否相等。但很多引用类型都对equals()方法进行了重写,使其比较的是对象的内容是否相等。例如String、Date等类对equals方法进行了重写,比较的是所指向的对象的内容是否相等。

测试代码

int a=3;
int b=3;
System.out.println("a==b?  "+(a==b)); //true

String str1="hello";
String str2="hello";
String str3=new String("hello");
String str4=new String("hello");
System.out.println("str1==str2?  "+(str1==str2));	//true
System.out.println("str2==str3?  "+(str2==str3));	//false
System.out.println("str3==str4?  "+(str3==str4));	//false
System.out.println("str3.equals(str4)?  "+str3.equals(str4));	//true

//假设定义了一个Dog类,并且没有重写equals()方法。
Dog dog1=new Dog();
Dog dog2=new Dog();
Dog dog3=dog2;
System.out.println("dog1==dog2?  "+(dog1==dog2)); //false 
System.out.println("dog3==dog2?  "+(dog3==dog2)); //true
System.out.println("dog1.equals(dog2)?  "+dog1.equals(dog2)); //false
System.out.println("dog3.equals(dog2)?  "+dog3.equals(dog2)); //true

这里说一下两种String创建对象方式的的区别:(建议结合下面图片进行理解)

  1. String str1=“hello”;
    这种方式在创建的时候,java虚拟机会检查字符串常量池中是否存在“hello”的字符串对象,如果不存在就在字符串常量池中创建该对象,将该对象的地址返回。如果存在,就不会在字符串常量池中创建新的对象,而是将存在的对象的地址返回。
  2. String str3=new String(“hello”);
    这种方式创建的时候,java虚拟机也会检查在字符串常量池中是否存在“hello”的字符串,如果存在,就不会在字符串常量池中创建新的对象,但会将该字符串对象内容拷贝,继续在堆内存中创建一个新的字符串对象。如果不存在,就先在字符串常量池中创建一个字符串对象,然后再去堆内存中创建一个新的字符串对象。也就是说,不管字符串常量池中存不存在,都会在堆内存中创建新的对象,而且最后会将堆内存中字符串对象的地址返回。

字符串的创建方式内存图在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值