java基础篇之Object类
1.Object类是所有类的超类
2.Object类的equals方法
public boolean equals(Object obj) {return (this == obj);}
equals方法的目的是判断两个对象是否相等,返回boolean值,注意它的参数类型是Object。Object中默认实现是判断两个对象的引用是否相等,但很多时候这种判断没什么意思,更多的是判断对象的状态属性是否相等,因此我们要能够自行实现equals方法
要实现equals方法首先要知道equals方法的特性 (1)自反性:x.equals(x),(2)对称性:x.equals(y) == y.equals(x),(3)传递性:x.equals(y),y.equals(z) =>x.equals(z),(4)一致性:x.equals(y)结果不变.(5),x不为null,x.equals(null)为false
class Employee {
private String name;
private double salary;
private Date hireDay;
@Override
public boolean equals(Object obj) {
//如果对象完全一致
if(this == obj) return true;
//如果obj为null,返回null
if(obj == null) return false;
//如果类类型不匹配,它们也不可能相等
/*
说明一下用Class对象判断和用instanceof关键字判断的区别:
a instanceof b 的判断出了自身对象还包括继承
a.getClass() == b.getClass() 的判断不包括继承的情况
具体用哪个还是要看你的需求:
如果equals的语义在每个子类中有所改变,就是用getClass检测
如果所有的子类拥有统一的语义,就是用instanceof检测
*/
if(getClass() != obj.getClass()) return false;
//现在我们能确定obj是非空对象的Employee对象
Employee other = (Employee)obj;
//测试对象属性是否完全相等
/*用Objects.equals主要是为了防备属性为null的情况*/
return Objects.equals(name, other.name)
&& salary == other.salary
&& Objects.equals(hireDay, other.hireDay);
}
}
3.hashCode方法
public native int hashCode();
哈希码又称散列码,是由对象导出的一个整型值,默认实现返回的是对象的地址.
如果重新定义equals方法,就必须重新定义hashCode方法,以便用户可以将对象插入到散列表中
两个对象,如果hashCode值不想等,则两个对象一定不相等,反之对象相等,hashcode也相等。但hashcode相等,两个对象不一定相等
一种实现:
public int hashCode() {return Object.hash(name,salary,hireDay);}
4.toString方法
该方法用于返回对象的字符串,在打印对象时会调用该方法
默认实现
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
自己实现:
public String toString() {
return getClass().getName() + "[name=" + name +",salary=" + salary + ",hireDay=" + hireDay + "]";
}
java基础篇之Object类的更多相关文章
- [ 转载 ] Java基础10--关于Object类下所有方法的简单解析
关于Object类下所有方法的简单解析 类Object是类层次结构的根类,是每一个类的父类,所有的对象包括数组,String,Integer等包装类,所以了解Object是很有必要的,话不多说,我们直 ...
- Java基础教程(19)--Object类
Object类位于类结构树的最顶端,所有的类都是它的直接或间接子类,因此所有的类都继承了Object类的方法,我们可以在需要的时候覆盖这些方法.下面是一些将会在本文中讨论的Object类的方法: ...
- java基础学习总结——Object类
一.Object类介绍
- Java 基础 常用API (Object类,String类,StringBuffer类)
Java API Java 的API(API: Application(应用) Programming(程序) Interface(接口)) Java API就是JDK中提供给我们使用的类,这些类将底 ...
- 【JAVA基础】10 Object类
1. Object类概述 是类层次结构的根类 每个类都使用 Object 作为超类 所有类都直接或者间接的继承自该类 所有对象(包括数组)都实现这个类的方法. 2. Object的构造方法 publi ...
- JAVA基础系列:Object类
1. 万物皆对象 1. JVM在编译源代码时,在遇到没有继承Object的对象的时候,编译器会默认指定一个默认的父类Object 2. Object 和接口的关系,接口是否继承Object?接口没有继 ...
- 金三银四跳槽季,BAT美团滴滴java面试大纲(带答案版)之一:Java基础篇
Java基础篇: 题记:本系列文章,会尽量模拟面试现场对话情景, 用口语而非书面语 ,采用问答形式来展现.另外每一个问题都附上“延伸”,这部分内容是帮助小伙伴们更深的理解一些底层细节的补充,在面试中可 ...
- java基础篇---I/O技术(三)
接上一篇java基础篇---I/O技术(二) Java对象的序列化和反序列化 什么叫对象的序列化和反序列化 要想完成对象的输入或输出,还必须依靠对象输出流(ObjectOutputStream)和对象 ...
- Java基础篇 - 强引用、弱引用、软引用和虚引用
Java基础篇 - 强引用.弱引用.软引用和虚引用 原创零壹技术栈 最后发布于2018-09-09 08:58:21 阅读数 4936 收藏展开前言Java执行GC判断对象是否存活有两种方式其中一种是 ...
随机推荐
- 编译 SharpNav 遇到的问题和解决过程
https://github.com/Robmaister/SharpNav 是github上基于recastnavtigation的一个C#项目. github上并没有详细的编译过程. 首先把项目c ...
- libssh2--ssh2实例
#include "libssh2_config.h"#include<libssh2.h>#include<libssh2_sftp.h> 上述为所包含必 ...
- Linux脑洞——怎么知道我这个Linux是啥时候开的机?
生产环境上,Linux服务器肯定不能随便重启,到底啥时候开的机,这个问题真没啥讨论价值.但是自己在WMWare Workstation下装虚拟机不一样 who -b
- Linux学习笔记(九)shell基础:echo、命令别名和常用快捷键
一.echo在屏幕上打印内容 echo [选项] [输出内容] -e 支持转义字符控制的字符转换 输出带颜色的文本 二.第一个脚本 编写脚本 注意: #!/bin/bash 此行不是注释,必须有 #! ...
- webpack中shimming的概念
在webpack打包过程中会去做一些代码上的兼容,或者打包过程的兼容,比如之前使用过的babel-polyfill这个工具,他解决了es6代码在低版本浏览器的兼容.这就是webpack中的垫片.他解决 ...
- JVM内存空间划分与作用详解
在之前已经对Java的字节码进行了非常详细而又系统的学习了,接下来开启jvm内存相关的新篇章,在一个新知识开头之前肯定得理论化的对其进行一个整体的介绍,所以摒弃浮躁,先来看看相关的理论,主要是看一下J ...
- sklearn逻辑回归实战
目录 题目要求 ex2data1.txt处理 方案一:无多项式特征 方案二:引入多项式特征 ex2data2.txt处理 两份数据 ex2data1.txt ex2data2.txt 题目要求 根据学 ...
- spring实例化三:CglibSubclassingInstantiationStrategy
在SimpleInstantiationStrategy类中,留下了包含MethodOverride对象的bd对象定义未做实现,做了抽象.CglibSubclassingInstanti ...
- JAVA遇见HTML——JSP篇:JSP内置对象(上)
JSP九大内置对象 JSP内置对象是Web容器创建的一组对象,不使用new关键就可以使用的内置对象. <% int[] value={60,70,80}; for(int i:value){ o ...
- jQuery序列化乱码解决
query之提交序列化表单(serialize)及乱码处理1 提交乱码处理JSP文件声明如下 <%@ page language="java" pageEncoding=&q ...