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 作为超类.所有对象(包括数组)都实现这个 ...
随机推荐
- 关于git远程被覆盖的问题
有同事A和B,git远程版本为A0,两个人的本地项目已经跟远程同步.同事A先向git提交了3次,A1.A2.A3.git远程版本为A0.A1.A2.A3.同事B也向git提交了1次B1,但是同事B提交 ...
- 【第十四篇】easyui datagrid导出excel
<a class="btn btn-app" onclick="exportExcel()"><i class="fa fa-edi ...
- Flume介绍与安装
搭建环境 部署节点操作系统为CentOS,防火墙和SElinux禁用,创建了一个shiyanlou用户并在系统根目录下创建/app目录,用于存放 Hadoop等组件运行包.因为该目录用于安装hadoo ...
- iOS -打包上传成功,在"构建版本"一直刷不出来
今天提交版本到appstore,构建版本一直不出来,等了一天也没有出来,其实就是权限问题,iOS13 来了,所以面临的问题随之而来,苹果给邮箱发了这段话: Dear Developer,We iden ...
- web性能优化实践
一.SQL查询优化 1.循环中有多次查询sql,改为在循环外一次查询后再处理 2.循环多次插入,改为组装好数据后批量插入 3.梳理业务逻辑能一次查完的,绝不分多次查 4.索引用起来 5.分页查询 二. ...
- Centos第一次使用配置IP地址
1.vim /etc/sysconfig/network-scripts/ifcfg-eth0 修改默认配置文件 TYPE=Ethernet BOOTPROTO=static #静态 可修改为[n ...
- Integer对象大小比较问题
一.问题 先来看一看例子 public class IntegerTest { public static void main(String[] args) throws Exception { In ...
- [VB.NET Tips]对于基本数据类型的提示
1.类型字符 有时需要直接量后面加上类型字符以明确指定类型,下面把常用的类型字符列出来 类型 字符 Short S Integer I Long L Decimal D Char c Single F ...
- C#操作SQLServer的一个简单封装
class DBHandler { //SqlConnection数据库连接对象 private SqlConnection localConnection = null; //构造函数中初始化连接对 ...
- Airflow自定义插件, 使用datax抽数
Airflow之所以受欢迎的一个重要因素就是它的插件机制.Python成熟类库可以很方便的引入各种插件.在我们实际工作中,必然会遇到官方的一些插件不足够满足需求的时候.这时候,我们可以编写自己的插件. ...