Object:万类之祖

  == : 比较的是是否是同一个对象,比较的是地址

 

equals: 是Object里面的方法,默认的是==,比较的是地址,但在String类型里重写为比较内容

一般我们在设计一个类中,需要重写父类的equals方法,需要遵照以下几个规则设计:

  • 自反性(x.equals(x)必须返回true);
  • 对称性(x.equals(y)返回true时,y.equals(x)也必须返回true);
  • 传递性(x.equals(y)和y.equals(z)都返回true时,x.equals(z)也必须返回true);
  • 一致性(当x和y引用的对象信息没有被修改时,多次调用x.equals(y)应该得到同样的返回值);
  • 非空性(对于任何非null值的引用x,x.equals(null)必须返回false)。
 String s = "seven" ;
String s1 = "seven";
System.out.println(s == s1); //返回false
System.out.println(s.equals(s2));//返回true

 

hashcode : 哈希码。 native本地方法(C、C++实现),操作系统实现逻辑,把结果返还给我们。把对象的内存地址经过算法得出的一个int。

 为什么重写equals必须重写hashcode?

 以下为重写equals和hashcode方法的源码,建议自动生成

 @Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}

现有两个对象

  Student s1=new Student("小明",18);

  Student s2=new Student("小明",18);

此时s1.equals(s2)返回true,但如果不重写hashcode,Object默认的hashcode将对象的内存地址经过哈希算法返回给我们一个int,就违反了两个对象相等,hashcode一定相等的规定

 关于hashcode的规定:

  • 两个对象相等,hashcode一定相等
  • 两个对象不等,hashcode不一定不等
  • hashcode相等,两个对象不一定相等("Aa"、"BB")
  • hashcode不等,两个对象一定不等

 toString : 把引用数据类型转换成字符串。直接打印一个引用数据类型的对象则默认调用这个对象动态toString方法。

 finalize : 里面的逻辑会在当前对象被垃圾回收器回收的时候执行。

 clone:Object默认的方法clone()实现的是浅拷贝

下面实现一个浅拷贝的实例,首先实现接口Cloneable并覆写方法

 public class Person implements Cloneable{

     @Override
public Object clone() throws CloneNotSupportedException
{
Object object = super.clone();
return object;
}
}

然后可以调用clone()方法,下面代码也展示了两种创建对象的方法1,new    2,clone()

 Person p1=new Person("张三",11);
Person p2=(Person)p1.clone();

Java学习笔记之Object常用方法的更多相关文章

  1. 1.9(java学习笔记)object类及toString()与equals()方法

    object类 java中objec是所有类公共的父类,一个类只要没有明显的继承某一类,那么它就是继承object类. 例如 class Person {......};和class Person e ...

  2. Java学习笔记之字符串常用方法

    一.String关键字一些常用方法 1.构造方法: public String(); 空构造 public String(byte[]  bytes);将字节数组转成字符串 public String ...

  3. 【原】Java学习笔记021 - Object

    package cn.temptation; public class Sample01 { public static void main(String[] args) { // 类 Object: ...

  4. Java学习笔记之——Object类

    所有类的祖先 如果一个类没有显式继承,则继承Object 每一个类都直接或间接的是Object的子类 相关API: protected Objectclone() 创建并返回此对象的副本. boole ...

  5. Java学习笔记——String类常用方法

    所谓的字符串就是对数组的包装,所以字符串内容无法进行更改.String在JDK1.8以前保存的是字符数组:private final char value[]; 而在JDK1.9之后保存的是字节数组: ...

  6. java学习笔记之基础篇

    java选择语句之switch   //switch可以用于等值判断 switch (e) //int ,或则可以自动转化成int 的类型,(byte char short)枚举jdk 7中可以防止字 ...

  7. java学习笔记6--类的继承、Object类

    接着前面的学习: java学习笔记5--类的方法 java学习笔记4--类与对象的基本概念(2) java学习笔记3--类与对象的基本概念(1) java学习笔记2--数据类型.数组 java学习笔记 ...

  8. java学习笔记16--I/O流和文件

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note16.html,转载请注明源地址. IO(Input  Output)流 IO流用来处理 ...

  9. Java学习笔记之---API的应用

    Java学习笔记之---API的应用 (一)Object类 java.lang.Object 类 Object 是类层次结构的根类.每个类都使用 Object 作为超类.所有对象(包括数组)都实现这个 ...

随机推荐

  1. 猿类如何捕获少女心--难以琢磨的try-catch

    背景故事 影片<金刚>是2005年上映的一部冒险电影,它讲述1933年的美国,一名勇于冒险的企业家及电影制作者,率领摄制队伍到荒岛拍摄,其中包括女主角安及编剧杰克,他们遇到恐龙及当地土著的 ...

  2. Spring Boot 自定义 Banner 教程

    我们在启动 SpringBoot 时,控制台会打印 SpringBoot Logo 以及版本信息.有的时候我们需要自己弄个有个性的文本图片.Spring Boot 为我们提供了自定义接口. . ___ ...

  3. 疑难杂症----Windows10

    现在大多数个人电脑所用的操作系统都是win10,而我们使用win10时总是会碰上各种各样的问题,所以专门写一篇博客来记录我碰上的各种问题,便于以后更快的解决问题. 一.小娜搜索不到应用问题解决方案 小 ...

  4. Linux 笔记 - 第八章 文档的打包与压缩

    博客地址:http://www.moonxy.com 一.前言 在 Linux 系统中,文件的后缀名没有实际的意义,加或者不加都无所谓.但是为了便于区分,我们习惯在定义文件名时加一个后缀名,比如常见的 ...

  5. 自己动手实现springboot配置(非)中心

    好久没写博客了,这段时间主要是各种充电,因为前面写的一些东西,可能大家不太感兴趣或者是嫌弃没啥技术含量,所以这次特意下了一番功夫.这篇博客其实我花了周末整整两天写好了第一个版本,已经开源出去了,同样是 ...

  6. [C++]类的设计(2)——拷贝控制(拷贝控制和资源管理)

      1.类的行为分类:看起来像一个值:看起来想一个指针.     1)类的行为像一个值,意味着他应该有自己的状态.当我们拷贝一个像值的对象时,副本和原对象是完全独立的.改变副本不会对原有对象有任何影响 ...

  7. [Vue warn]: Duplicate keys detected: 'area'. This may cause an update error.

    运行vue程序,浏览器报错: 原因:检测到重复的密钥:'area',因为在使用v-for循环绑定的时候,key的值是唯一的,不能相同,否则会出现意想不到的bug 解决办法:v-for时绑定的key唯一

  8. 关于canvas合成分享图

    最近在uni-app项目中遇到一个合成分享图的需求,其实最开始是用原生写法来做的,后台发现在PC端测试是可以的,但在APP模拟器中会出现问题,可能是因为两者的js环境不同吧,uni-app官网也说了这 ...

  9. 判断java中最多的词组

    其中的难点,是空格,以及如果第一个是空格怎么办,虽然事后看着很简单,但是做的时候却十分的困难! static void Daunyu()throws IOException {     Word wo ...

  10. Java 世界的盘古和女娲 —— Zygote

    本文基于 Android 9.0 , 代码仓库地址 : android_9.0.0_r45 文中源码链接: Zygote.java ZygoteInit.java ZygoteServer.java ...