Java学习笔记之Object常用方法
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.9(java学习笔记)object类及toString()与equals()方法
object类 java中objec是所有类公共的父类,一个类只要没有明显的继承某一类,那么它就是继承object类. 例如 class Person {......};和class Person e ...
- Java学习笔记之字符串常用方法
一.String关键字一些常用方法 1.构造方法: public String(); 空构造 public String(byte[] bytes);将字节数组转成字符串 public String ...
- 【原】Java学习笔记021 - Object
package cn.temptation; public class Sample01 { public static void main(String[] args) { // 类 Object: ...
- Java学习笔记之——Object类
所有类的祖先 如果一个类没有显式继承,则继承Object 每一个类都直接或间接的是Object的子类 相关API: protected Objectclone() 创建并返回此对象的副本. boole ...
- Java学习笔记——String类常用方法
所谓的字符串就是对数组的包装,所以字符串内容无法进行更改.String在JDK1.8以前保存的是字符数组:private final char value[]; 而在JDK1.9之后保存的是字节数组: ...
- java学习笔记之基础篇
java选择语句之switch //switch可以用于等值判断 switch (e) //int ,或则可以自动转化成int 的类型,(byte char short)枚举jdk 7中可以防止字 ...
- java学习笔记6--类的继承、Object类
接着前面的学习: java学习笔记5--类的方法 java学习笔记4--类与对象的基本概念(2) java学习笔记3--类与对象的基本概念(1) java学习笔记2--数据类型.数组 java学习笔记 ...
- java学习笔记16--I/O流和文件
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note16.html,转载请注明源地址. IO(Input Output)流 IO流用来处理 ...
- Java学习笔记之---API的应用
Java学习笔记之---API的应用 (一)Object类 java.lang.Object 类 Object 是类层次结构的根类.每个类都使用 Object 作为超类.所有对象(包括数组)都实现这个 ...
随机推荐
- python根据搜索词下载百度图片
# coding=utf-8 """根据搜索词下载百度图片""" import re import urllib import os def ...
- 解决在Filter中读取Request中的流后,后续controller或restful接口中无法获取流的问题
首先我们来描述一下在开发中遇到的问题,场景如下: 比如我们要拦截所有请求,获取请求中的某个参数,进行相应的逻辑处理:比如我要获取所有请求中的公共参数 token,clientVersion等等:这个时 ...
- Swift从入门到精通第十四篇 - 错误处理 初识
错误处理(学习笔记) 环境Xcode 11.0 beta4 swift 5.1 错误表现和抛出 在 swift 中,错误由符合 Error 协议的类型值表示 // 示例 enum VendingMac ...
- Java 集合转换(数组、List、Set、Map相互转换)
package com.example.test; import java.util.ArrayList; import java.util.Arrays; import java.util.Hash ...
- html中的空格
网上摘录: HTML提供了6种空格实体.除第一种外,其他几种空格在不同浏览器中宽度各异. 它叫不换行空格,全称No-Break Space,它是最常见和我们使用最多的空格, ...
- springboot系列之04-提高开发效率必备工具lombok
未经允许,不得转载 原作者:字母哥博客 本文完整系列出自:springboot深入浅出系列 一.前置说明 本节大纲 使用lombok插件的好处 如何安装lombok插件 使用lombok提高开发效率 ...
- Vue-cli连接mysql
本文把前后台一起串起来,前端使用vue-cli后台用nodejs连接数据库,vue-cli请求接口其数据是来自于mysql数据. 一.vue-cli请求接口部分 <template> &l ...
- mkdir,rmdir
mkdir (选项)(参数) 创建文件夹-m:创建文件夹的同时,赋予其权限-p:若创建目录的上层不存在时,一并创建出来-v:显示创建的过程创建多个目录的时候,用空格隔开 rmdir (选项)(参数) ...
- git clone remote: HTTP Basic: Access denied
git clone 项目失败,报下面的错误信息: $ git clone http://192.168.0.141/xxxx.git Cloning into 'appEnterprise'... r ...
- 图解Mongo Shell的使用
mongo shell是一个MongoDB的交互式JavaScript接口.您可以使用mongo shell来查询和更新数据以及执行管理操作. 本篇经验将和大家介绍Mongo Shell的使用方法,希 ...