Object类的常用方法
Object类是Java中所有类的始祖。如果没有明确的指定继承,则默认继承Object类。在Java中除了基本类型外都是Object类型的对象,包括数组。
1)equals方法
Object:
public boolean equals(Object obj) { return (this == obj); }
在不重写此方法的情况下,默认比较两个对象是否指向同一对象。在实际开发中通常要重写此方法,根据属性来比较二者是否相等。
编写equals(Object other)方法的建议:
- 检测this和other是否引用同一个对象,若是,则显然两者相等,返回true。
- 检测other是否为null,若是,则返回false。
- 检测this和other的Class是否相同,若不是,则返回false。
- 根据this和other的属性是否都相同,若是,则返回true,否则,返回false。
Demo:
@Override public boolean equals(Object obj) { System.out.println(this); if(this == obj){ return true; } if(obj == null){ return false; } if(this.getClass() != obj.getClass()){ return false; } //确认obj是Employee的非空对象 Employee other = (Employee) obj; return Objects.equals(this.name,other.name) && this.salary == other.salary && Objects.equals(this.hireDay,other.hireDay); }
这是String的equals():
public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String)anObject; int n = value.length; if (n == anotherString.value.length) { char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } return false; }
由此可以看出字符串的equals方法是先检测二者引用,再检测二者字符串的长度,最后再逐字符比较得出结果。
2)hashCode方法:
hash code即散列码是由对象导出的一个整型值。每个对象都有个hash code,默认是该对象的存储地址。因此两个不同的对象,其hash code一般是不同的,除非重写此方法。
String的hashCode():
public int hashCode() { int h = hash; if (h == 0 && value.length > 0) { char val[] = value; for (int i = 0; i < value.length; i++) { h = 31 * h + val[i]; } hash = h; } return h; }
由此可以看出,只要String的值相同,即使不是同一个对象,其hash code也是相同的。
若想自己重写hashCode(),则可以考虑使用Objects.hash(Object ... object),此方法的参数是该类的属性,由此方法可以返回 一个散列码。
如果存在一个数组类型的域,可以使用Arrays.hashCode()返回散列码。
3)toString方法:
toString方法返回表示对象值得字符串。
Object的toString方法:
public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); }
显然,其返回值是类名+@+十六进制的hash code。
若重写toString(0方法,则大多数类都遵循这种格式:类名+一堆方括号括起来的域值。
Demo:
@Override public String toString() { return getClass().getName() + "[name=" + name + ",salary=" + salary + ",hireDay=" + hireDay + "]"; }
另外,当打印对象时,就是打印该对象toString()的返回值。而且,当对象与一个字符串通过“+”连接时,Java会自动的调用toString()。
补充:数组也是对象,但无法重写toString(),可以使用Arrays.toString()来打印数组。
Object类的常用方法的更多相关文章
- 【转载】JAVA基础复习与总结<三> Object类的常用方法
Object类是一个特殊的类,是所有类的父类,如果一个类没有用extends明确指出继承于某个类,那么它默认继承Object类.这里主要总结Object类中的三个常用方法:toString().equ ...
- Object类及其常用方法简介
https://www.cnblogs.com/wxywxy/p/6740277.html Object类是一个特殊的类,是所有类的父类,如果一个类没有用extends明确指出继承于某个类,那么它默认 ...
- Object类和常用方法
Object类是java语言的根类,要么是一个类的直接父类,要么就是一个类的间接父类.所有对象(包括数组)都实现这个类的方法. 引用数据类型:类/接口/数组,引用数据类型又称之位对象类,所谓的数组变量 ...
- Eclipse的使用与Oblect类的常用方法_DAY11
一.Java开发工具的使用 A:notepad windows自带的记事本. B:高级记事本 Editplus Notepad++ UE sublime2 C:集成开发工具(IDE) 开发和运行. E ...
- Java 常用对象-Object类
2017-10-31 23:42:08 Object类:类 Object 是类层次结构的根类.每个类都使用 Object 作为超类.所有对象(包括数组)都实现这个类的方法. 或者说,每个类都直接或者间 ...
- 菜鸡的Java笔记 Object 类
Object 类 Object类 的主要作用 Object 类的常用方法 内容 虽然有了对象的向上转型,可以解决了参数的统一问题,但是 ...
- 包和访问权限修饰符,.单例设计模式,.Object类常用方法,.内部类
1.包和访问权限修饰符 1.1 包 为什么要导包? 将字节码文件(.class)文件进行分类存放 --->包 其实就是文件夹 import java.util.Arrays; 包的划分规则 方案 ...
- AJPFX关于Java Object类常用方法小总结
java.lang.Object java.lang包在使用的时候无需显示导入,编译时由编译器自动导入. Object类是类层次结构的根,Java中所有的类从根本上都继承自这个类. Object类 ...
- 写出java.lang.Object类的六个常用方法
java是面向对象的语言,而Object类是java中所有类的顶级父类(根类). 每个类都使用Object类作为超类,所有对象(包括数组)都实现这个类的方法,即使一个类没有用extends明确指出继承 ...
随机推荐
- hadoop单机配置
条件: 先下载VMware1.2,然后安装. 下载ubuntu-1.4.05-desktop-amd64.iso.下载地址:http://mirrors.aliyun.com/ubuntu-relea ...
- g++ 出现 undefined reference to ......
g++ 出现 undefined reference to ...... 检查/usr/local/lib /usr/lib 发现已经存在相应的库文件 那么,问题可能出现在g++链接次序上,即先链接 ...
- HDU——Cover——————【技巧】
Cover Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...
- BNU 26349——Cards——————【区间dp】
题目大意:给你n张牌,排成一排放在桌子上,可以从左端拿也可以从右端拿.现在有A,B两人轮流取牌,A先取,两人足够聪明,即都想取最大的牌总和,问A能取到的最大值. 解题思路:定义dp[i][j][k]. ...
- 如何解读IL代码
如何解读IL代码 关于IL代码,我有将从三个方面去揭开它神秘的面纱.IL代码是什么?我们为什么要去读懂IL代码?我们如何去读懂IL代码?这三个问题的解答,将是我解读IL代码的整体思路. IL代码是什么 ...
- 让GIt忽略SSL证书错误的方法
当你通过HTTPS访问Git远程仓库,如果服务器的SSL证书未经过第三方机构签署,那么Git就会报错.这是十分合理的设计,毕竟未知的没有签署过的证书意味着很大安全风险.但是,如果你正好在架设Git服务 ...
- C#注册URL协议,使用浏览器打开本地程序,类似网页上点了QQ交谈打开本地QQ客户端程序
本教程适用于Windows系统 从浏览器上打开本地程序,主要用到了本地URL协议,其实主要就是改注册表 先建立一个项目,我建的是控制台项目 在Program.cs写2个静态方法用来添加注册表.移除注册 ...
- three.js学习笔记--基础知识
基础知识 从去年开始就在计划中的three.js终于开始了 历史介绍 (摘自ijunfan1994的转载,感谢作者) OpenGL大概许多人都有所耳闻,它是最常用的跨平台图形库. WebGL是基于Op ...
- adobe air ane 中有的java class 打包 apk 后却没有了报NoClassDefFoundError ,ClassNotFoundException
apache flex sdk 手机项目 09-18 10:34:55.030: E/AndroidRuntime(19513): FATAL EXCEPTION: main 09-18 10:34: ...
- artTemplate教程
artTemplate教程 官方文档 一个简单的例子 <!DOCTYPE html> <html lang="zh"> <head> <m ...