一、关于java语言中如何比较两个字符串是否一致

1.不能使用双等号来比较两个字符串是否相等,应该使用equals方法进行比较,如例子

package com.bjpowernode.java_learning;

​

public class D57_1_ {

  public static void main(String[] args){

    String s1 = new String("ABC");

    String s2 = new String("ABC");

    System.out.println(s1 == s2);//false,这是因为这个两个对象作比较,比较的是对象的地址

    System.out.println(s1.equals(s2));//equals方法才是比较字符串里面的值

  }

}

2.重写类的equals可以达到判断对象内部的是否一致的效果,而不是使用类原来的对比地址的作用

package com.bjpowernode.java_learning;

​

public class D56_2_equalsMethodAnalysis {

  public static void main(String[] args) {

    Object o1 = new Object();

    Object o2 = new Object();

    boolean b1 = o1.equals(o2);

    System.out.println(b1);

    Star56 s1 = new Star56(100,"xiaoming");

    Star56 s2 = new Star56(100,"xiaoming");

    System.out.println(s1.equals(s2));

    //这样比较出来的是false,因为比较的是两个对象的内存地址,但是这样显然是不符合我们的预期

    //其实我们想要比较的是两个对象里面的内容是不是一致的。于是我们重写

  }

}

class Star56{

  int id;

  String name;

  public Star56(int id,String name) {

    this.id = id;

    this.name = name;

  }

  public boolean equals(Object obj) {

    if(obj instanceof Star56) {//强制类型转换,必须先做判断,二者是否存在继承关系

      Star56 s = (Star56)obj;

      if (s.id == this.id && s.name.equals(this.name)) {

        return true;

      }

    }

    return false;

  }

}

​

二、finalize方法、hashCode方法​

1.finalize方法每个java对象都有

2.finalize方法不需要程序员去调用,由系统调用

3.java对象如果没有更多的引用去指向它,则该java对象成为垃圾数据,等待垃圾回收器的回收,垃圾回收器在回收这个java对象之前那会自动调用该对象的​finalize方法。

finalize方法是该对象啊马上就要被回收了,例如:需要释放资源,则可以在该方法中释放。

package com.bjpowernode.java_learning;

​

public class D57_2_MethodOfFinalize {

  public static void main(String[] args) {

    Person57 p1 = new Person57();

    p1 = null;//没有引用在指向它,等待被回收

    //程序员只能去“建议”垃圾回收器回收垃圾

    System.gc();//这个就是系统

    //使用hashcode方法,返回的是该对象的哈希值,java对象的内存地址经过哈希算法得到的int类型的值

    Person57 p2 = new Person57();

    System.out.println(p2.hashCode());

    //使用clone()方法,可以对一个对象进行复制一份,防止把原来的对象内容给破坏了

  }

}

class Person57{

  //重写Object方法中的fianlize方法

  public void fianlize() throws Throwable{//至于为什么这么写,暂时不用知道,因为源码中就是这样写的,我们重写里面的函数体就行了

    System.out.println(this + "马上就要被回收了");

    //可以重写finalize方法,比如里面重写给对象指定引用,以此来缓解,对象要被垃圾回收器回收

  }

}

三、源码:

D57_1_CompareString.java

D57_2_MethodOfFinalize.java

地址:

https://github.com/ruigege66/Java/blob/master/D57_1_CompareString.java

https://github.com/ruigege66/Java/blob/master/D57_2_MethodOfFinalize.java

2.CSDN:https://blog.csdn.net/weixin_44630050(心悦君兮君不知-睿)

3.博客园:https://www.cnblogs.com/ruigege0000/

4.欢迎关注微信公众号:傅里叶变换,个人公众号,仅用于学习交流,后台回复”礼包“,获取大数据学习资料

Java连载57-equals重写、finalize方法、hashCode方法​的更多相关文章

  1. equals()与 == 比较,hashCode方法

    1.Object类    Object类是java中一切类的父类,java中所有的类都直接或间接    继承自Object类        Object中定义的方法不多,原因在于,java的类多种多样 ...

  2. java 如何重写equal 和hashcode方法(最佳实践)

    先看完理解这篇:Java hashCode() 和 equals()的若干问题解答 实现高质量的equals方法的诀窍包括 使用==操作符检查“参数是否为这个对象的引用”: 使用instanceof操 ...

  3. Java连载85-集合的Contains和Remove方法

    一.包含与删除两种方法解析 1.boolean contains(Object o);判断集合中是否包含某个元素. package com.bjpowernode.java_learning; imp ...

  4. Java连载76-基础数据类型包装类型及其方法简介

    一.java中八种基本数据类型对应的包装类型 基本数据类型      包装类型 byte                    java.lang.Byte short                ...

  5. Java连载67-深入一维数组、main方法中的args参数详解

    一.复习了一维数组,还复习了强制类型转换的注意点. package com.bjpowernode.java_learning; public class D67_1_GoDeepIntoArrays ...

  6. Java连载29-方法执行内存分析、方法重载

    一.JVM包含三个内存区:栈内存.堆内存.方法区内存 二.注意点 (1)在MyEclipse中字体是红色的是一个类的名字,并且这个类除了我们自定义的类是JavaSE类库中自带的 (2)其实JavaSE ...

  7. Java连载63-异常处理try...catch...、方法getMessageyu printStackTrace

    一.处理异常的第二种方法 1.try......catch... 语法: try{ 可能出现异常的代码: }catch{ 处理异常的代码: }catch{ 注意: (1)引入了什么异常,catch里面 ...

  8. Java连载41-this关键字其他注意事项、static方法

    一.this关键字 1.this在多数情况下都会省略 2.this不能用在含有static的方法之中. 3.static的方法的调用是不需要对象的,直接使用格式:类名.方法名:没有当前对象,自然不能访 ...

  9. Java 如何重写对象的 equals 方法和 hashCode 方法

    前言:Java 对象如果要比较是否相等,则需要重写 equals 方法,同时重写 hashCode 方法,而且 hashCode 方法里面使用质数 31.接下来看看各种为什么. 一.需求: 对比两个对 ...

  10. 对象作为 map 的 key 时,需要重写 equals 方法和 hashCode 方法

    对象作为 map 的 key 时,需要重写 hashCode 和 equals方法 如果没有重写 hashCode 方法,那么下面的代码示例会输出 null 我们首先定义一个对象:BmapPoint, ...

随机推荐

  1. Java 从入门到进阶之路(十三)

    在之前的文章我们介绍了一下 Java 类的 private,static,final,本章我们来看一下 Java 中的抽象类和抽象方法. 我们先来看下面一段代码: // 根据周长求面积 class S ...

  2. 大数据学习笔记——Linux基本知识及指令(理论部分)

    Linux学习笔记整理 上一篇博客中,我们详细地整理了如何从0部署一套Linux操作系统,那么这一篇就承接上篇文章,我们仔细地把Linux的一些基础知识以及常用指令(包括一小部分高级命令)做一个梳理, ...

  3. JS基础-原型链和继承

    创建对象的方法 字面量创建 构造函数创建 Object.create() var o1 = {name: 'value'}; var o2 = new Object({name: 'value'}); ...

  4. spring data jpa 操作pipelinedb 的continuous view 与stream

    一. 由于pipelinedb是postgreSQL的扩展,因此相关依赖于配置都合集成postgreSQL是一样的. springboot + spring data jpa + postgreSQL ...

  5. VS删除代码中没用的空白行

    在vs编辑器中有时需要批量删除无用的空白行,为此,可以使用vs编辑器的查找替换功能: 1. Ctrl+H,打开替换功能框. 2.选择“使用正则表达式”,“当前文档”. 3.在查找框中输入: (?< ...

  6. Java生鲜电商平台-生鲜系统中商品订单系统售后系统设计

    Java生鲜电商平台-生鲜系统中商品订单系统售后系统设计(服务订单履约系统) 说明: 电商之下,我们几乎能从电商平台上买到任何我们日常需要的商品,但是对于很多商品来说,用户购买发货后,只是整个交易流程 ...

  7. 高版本Visual Studio和低版本ArcGIS共存 工具箱没有控件的解决方法

    转载请声明.博客园/B站/CSDN/知乎/小专栏 @秋意正寒 欢迎访问小专栏,更多WebGIS开发(Cesium等)经验分享:https://xiaozhuanlan.com/gishome 众所周知 ...

  8. Androi O Automotive 介绍

    最近由于工作需要对android o 中的 automotive源码进行了深入的学习,现总结如下: Android O Vehicle之架构介绍 Android O Vehicle之Car Servi ...

  9. openssl 证书请求和签名命令req基本分析

    一 基本概念: OpenSSL 是一个开源项目,其组成主要包括一下三个组件: openssl:多用途的命令行工具 libcrypto:加密算法库 libssl:加密模块应用库,实现了ssl及tls o ...

  10. Python学习:50 行 Python 代码,带你追到最心爱的人

    程序员世纪难题 人们一提到程序员第一反应就是:我知道!他们工资很高啊!但大部分都是单身狗,不懂得幽默风趣,只是每天穿格子 polo 衫的宅男一个.甚至程序员自己也这样形容自己:钱多话少死的早.程序员总 ...