equals(),hashCode(),==的区别

1.字符串的声明和初始化有两种情况
  1)String str = new String ("abc");
     String str1= new String("abc");
    引用对象str 和str1两个内容相同的字符串对象,他们的内存的地址是不同的
    只要用到new总会生成新的对象
  2)String str ="abc"和String str1="abc";在JVM中存在着一个字符串池,其中保存
    这许多String对象,并可以被共享,str和str1引用的是常量池里面的对象,String类
    是不可变得类,一旦创建就不能被修改,String可以被共享而不会导致程序混乱

  3)引申:
   对于String类型的变量s。赋值语句s=null和s=""是否相同?
    对于赋值语句s=null;其中s 是一个字符串引用类型,她不指向任意一个字符串,而赋值语句
    s="",中s是一个字符串引用的,他指向另外一个字符串(这个字符串的值为 “”,即空字符)
   所以两者是不同的;
 
   4)String s =new String ("abc");
     这一个语句可以分为两个过程实现:第一是新建对象的过程,即new String(""),第二过程就是赋值
     即String s=;new String("abc")等价于“abc” 和new String()两个操作,若在字符串池不存在  
     “abc”,则会创建一个字符串常量“abc”,并将其添加到字符串池中,若存在,则不创建,然后new String()会在堆里创建一个
    新的对象


   4)常见笔试题:new String("abc")创建了几个对象;
    答案:一个或者两个如果常量池中原来有"abc",那么只创建一个对象,如果常量池中原来没有字符串“abc”
    ,那么就会创建两个;


2.“==”,equals和hashCode什么区别?
   1)”==“运算符用来比较两个变量的值是否相,也就是比较变量对应的内存中的数值是否相同,要比较两个基本类型的数据或者两个引用变量的地址
     是否相等,只能用”==“运算符,但是要比较两个对象的内容是否相等不能用"==";

   2)equals是Object类提供的方法之一,每个对象都有equals()这个方法,当类中没有定义到equals()方法时,他就会使用父类的equals(),这样的equals(obj)
    与"=="运算符一样,都是比较引用

   3)equals与”==“相比,equals(obj)方法的特点就是它可以被覆盖,通过覆盖他不再比较引用而是比较数据的内容;
    例如String类中的equals(obj)是比较两个独立对象的内容是否相同,即堆中的内容是否相同
     String str = new String ("abc");
     String str1= new String("abc");
    str==str1(结果为false);比较是否为同一对象,比较的是地址
    str.equals(str1)(结果为ture),因为String类覆盖类Object的equals()方法。这时是比较内容

   4)hashCode()方法是从Object中继承过来的,它也是用来鉴定两个对象是否相等,Object类中的hashCode()方法返回对象在内存中地址转换成Int值,
     如果没有重写该方法,任何对象hashCode()方法都是不相等的

   5)equals()与hashCode的区别:
     a.equals()是给用户调用的,如果判断两个对象是否相等,可以重写equals,在代码中调用就可以判断了,对于hashCode(),用户一般不会调用,
       它返回的是int类型,比较起来不直观,相当于是一个对象编码
     b.hashCode()与equals()返回值的关系?
      A) a.equals(b)返回true,那么这两个对象的hashCode()是必须都产生相同的整数结果,反之,a,b返回值有可能相等,也可能不相等;
      B)hashCode的返回值不相等,equals()返回值不一定相等,反之一定相等

   笔试题:
    a.Set里的元素是不能重复的,那么用什么方法来区分是否重复?使用==还是equals()?
    答:用iterator()方法来区分是否重复
       

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值