1.9(java学习笔记)object类及toString()与equals()方法
object类
java中objec是所有类公共的父类,一个类只要没有明显的继承某一类,那么它就是继承object类。
例如 class Person {......};和class Person extends Object{......}是一样的。如果我们的Studdent继承了Person类,继承结构就应该是
这时大家可能会想,为什么要默认继承object类,把objec类作为公共的父类有什么用?
object类作为公共的父类,那么所有的子类都可以调用Object类中的方法。
下列结束两个Object类中的方法
1.toString
我们看下列代码
package TestObject; public class Person {
public static void main(String[] args){
Student stu1 = new Student();
System.out.println(stu1);
System.out.println(stu1.toString());
} } class Student extends Person{
void study(){
System.out.println("学习中...");
}
}
运行结果:
TestObject.Student@15db9742
TestObject.Student@15db9742
我们会发现运行的结果是一样的。我们在来看看object中toString()f方法的源码
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
前面是获取名称,后面是获取地址。
这个方法是Object类中的,是所有子类的公共父类,所以我们可以通过重写toString()方法来达到我们需要的功能。
package TestObject; public class Person {
String name = "hcf";
public static void main(String[] args){
Student stu1 = new Student();
System.out.println(stu1);
System.out.println(stu1.toString());
} } class Student extends Person{
void study(){
System.out.println("学习中...");
}
public String toString(){
return name;
}
}
运行结果:
hcf
hcf
这样我们就重写了Object类中的toString()方法。
2.equals()
我们先看下object类中的equals()方法源码
public boolean equals(Object obj) {
return (this == obj);
可以看出,这个比较是直接比较地址值是否相等。
我们实际使用时可能认为,两个对象的内容相同就是相同的对象,可这时使用equals比较会出问题。因为对象的内容相同,但它们的存放地址是不同的,即不同的地址存放着相同的内容。
这是我就需要重写object类中equals方法,改写成对象的内容相同就代表它们相同。
下面是重写之后的equals方法。
package TestObject; public class Person {
String name = "hcf";
public static void main(String[] args){
Student stu1 = new Student();
Student stu2 = new Student();
System.out.println(stu1 == stu2);
System.out.println(stu1.equals(stu2));
}
} class Student extends Person{
void study(){
System.out.println("学习中...");
}
public String toString(){
return name;
} @Override //加上这个标记代表重写了该方法。
public boolean equals(Object obj) { //因为Object是所有对象的父类,所以可以使用Object来接受任意类型的对象,便于操作。
if(this == obj) //首先判断两个对象地址是否相同,地址相同则肯定是相同对象。
return true;
if(!(obj instanceof Student)) //然后在判断两个是不是同一类,如果类不想同,则不同。
return false;
Student stu = (Student)obj; //先将obj强制转型成Student,然后一个一个属性区比较
if(stu.name.equals(this.name)) //此时的equals是String类中的方法,作用是比较字符的内容是否相同。
return true; //stu.name是String形式,所以调用的是String中的equals方法,
else //String中也重写了equals方法,作用是比较字符串内容是否相等。
return false;
} }
object类中一些方法我们会根据自己需要来重写。
1.9(java学习笔记)object类及toString()与equals()方法的更多相关文章
- Object类的toString()和equals()方法
我们知道,Object类是所有类的父类,因此也被称为根类.祖先.那么,我们就来看一看Object类的最常用的两个方法是如何用的. 1.toString方法: Object类的toString()方法默 ...
- Object类的toString和Equals方法,以及Objects类的Equals方法
Object类 toString()方法 public class Person { private String name; private int age; public Person() { } ...
- Java学习笔记——File类之文件管理和读写操作、下载图片
Java学习笔记——File类之文件管理和读写操作.下载图片 File类的总结: 1.文件和文件夹的创建 2.文件的读取 3.文件的写入 4.文件的复制(字符流.字节流.处理流) 5.以图片地址下载图 ...
- Java学习笔记之---类和对象
Java学习笔记之---类和对象 (一)类 类是一个模板,它描述一类对象的行为和状态 例如:动物类是一个类,动物们都有属性:颜色,动物们都有行为:吃饭 public class Dog { Stri ...
- Java SE学习笔记 --->高级类特性 ---> toString() 方法
概述: toString() 方法在面向对象当中十分常见,使用频率很高,和equals() 方法一样,也是Object类中定义的方法. jdk中 源码: java.lang.Object类中ToStr ...
- java继承,final,super,Object类,toString,equals,
Java中的内部类:成员内部类静态内部类方法内部类匿名内部类 内部类的主要作用如下: 1. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类 2. 内部类的方法可 ...
- Java中的Object类的toString()方法,equals()方法
Object类是所有类的父类,若没有明确使用extends关键字明确表示该类继承哪个类,那么它就默认继承Object类,也就可以使用Object中的方法: 1.toString 如果输出一个对象的时候 ...
- Java学习笔记 04 类和对象
一.类和对象的概念 类 >>具有相同属性和行为的一类实体 对象 >>实物存在的实体.通常会将对象划分为两个部分,即静态部分和动态部分.静态部分指的是不能动的部分,被称为属性,任 ...
- Java学习笔记-枚举类
实例有限且固定的类成为枚举类 枚举类的实现 早期时候的实现形式: public static final int SEASON_SPRING = 1; public static final int ...
随机推荐
- HDU3038:How Many Answers Are Wrong(带权并查集)
How Many Answers Are Wrong Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Ja ...
- Covered Points Count(思维题)
C. Covered Points Count time limit per test 3 seconds memory limit per test 256 megabytes input stan ...
- 网络编程:connect函数
TCP客户用connect函数来建立与TCP服务器的连接: cpp #include<sys/socket.h> int connect(int sockfd, const struct ...
- linux下输出tomcat控制台信息
进入tomcat/logs/目录执行命令:tail -f catalina.out即可
- [洛谷P1382] 楼房
题目描述 地平线(x轴)上有n个矩(lou)形(fang),用三个整数h[i],l[i],r[i]来表示第i个矩形:矩形左下角为(l[i],0),右上角为(r[i],h[i]).地平线高度为0.在轮廓 ...
- 51nod 扔盘子
题目传送门 这道题一开始写了n方的算法 果不其然 它T了 所以就想想o(n)的算法 写不出来 就像sbzhq学习了一下 这道题啊 要维护一下从深度1到n每一段的最小值以及他的位置 然后就暴力搞一搞就o ...
- 单选按钮 JradioButton 和复选框 JcheckBox 的使用
package first; import javax.swing.*; import java.awt.*; import java.awt.event.*; class BRTest extend ...
- WebSocket最简易理解,term.js插件的使用
介绍WebSocket WebSocket我想大家并不陌生,无论你的的工作中是否用到了它,都或多或少听说过,它是h5中新增的,在某些方面可以很好的替代我们一直沿用的ajax技术,甚至更加的出色.但是它 ...
- 最近研究xcodebuild批量打包的一些心得
http://blog.csdn.net/tlb203/article/details/8131707 转自Rainbird的个人博客 以前的时候只知道做安卓开发的兄弟挺辛苦的,不但开发的时候要适配一 ...
- Linux下安装php环境并且配置Nginx支持php-fpm模块[www]
Linux下安装php环境并且配置Nginx支持php-fpm模块 http://www.cnblogs.com/freeweb/p/5425554.html 5分钟搭建 nginx +php --- ...