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

本文详细解析了Java中字符串的声明与初始化方式,包括字符串池的概念及其在内存中的存储方式。同时,深入探讨了“==”、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()方法来区分是否重复
       

内容概要:本文介绍了ENVI Deep Learning V1.0的操作教程,重点讲解了如何利用ENVI软件进行深度学习模型的训练与应用,以实现遥感图像中特定目标(如集装箱)的自动提取。教程涵盖了从数据准备、标签图像创建、模型初始化与训练,到执行分类及结果优化的完整流程,并介绍了精度评价与通过ENVI Modeler实现一键化建模的方法。系统基于TensorFlow框架,采用ENVINet5(U-Net变体)架构,支持通过点、线、面ROI或分类图生成标签数据,适用于多/高光谱影像的单一类别特征提取。; 适合人群:具备遥感图像处理基础,熟悉ENVI软件操作,从事地理信息、测绘、环境监测等相关领域的技术人员或研究人员,尤其是希望将深度学习技术应用于遥感目标识别的初学者与实践者。; 使用场景及目标:①在遥感影像中自动识别和提取特定地物目标(如车辆、建筑、道路、集装箱等);②掌握ENVI环境下深度学习模型的训练流程与关键参数设置(如Patch Size、Epochs、Class Weight等);③通过模型调优与结果反馈提升分类精度,实现高效自动化信息提取。; 阅读建议:建议结合实际遥感项目边学边练,重点关注标签数据制作、模型参数配置与结果后处理环节,充分利用ENVI Modeler进行自动化建模与参数优化,同时注意软硬件环境(特别是NVIDIA GPU)的配置要求以保障训练效率。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值