Java学习笔记18(Object类)
Object类是Java中最顶层的父类,所有类都是它的子类,接口不继承它
Object类中的方法:
官方资料:boolean equals(Object obj) 指示其他某个对象是否与此对象“相等”
示例:
package demo; public class Person extends Object {
private String name;
private int age; public Person() {
} public Person(String name, int age) {
this.name = name;
this.age = age;
} // 重写父类的equals方法
// 源代码相同,equals是比较两个对象的内存地址 public boolean equals(Object obj) {
return this == obj;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
}
}
package demo; public class TestEquals {
public static void main(String[] args) {
//Person类继承了Object类,继承了父类的方法
Person p1 = new Person("张三", 18);
Person p2 = new Person("李四", 20);
boolean b1 = p1.equals(p2);
System.out.println(b1);//输出false
p1 = p2;
boolean b2 = p1.equals(p2);
System.out.println(b2);//输出true }
}
不过发现比较内存地址是没有意义的,为了满足一些需求,我们可以重写下equals方法:
package demo; public class Person extends Object {
private String name;
private int age; public Person() {
} public Person(String name, int age) {
this.name = name;
this.age = age;
} // 重写父类的equals方法,自己定义比较方式
// 比较两个对象的age是否相同 public boolean equals(Object obj) {
// 处理传入的是本身的情况
if (this == obj) {
return true;
}
// 处理传入空的情况
if (obj == null) {
return false;
}
// 多态中不能调用子类的特性,所以需要向下转型
// 加入instanceof为了防止风险,因为Object是顶层父类,防止传入其他的类
if (obj instanceof Person) {
Person p = (Person) obj;
return this.age == p.age;
} else {
return false;
}
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
}
}
package demo; public class TestEquals {
public static void main(String[] args) {
//Person类继承了Object类,继承了父类的方法
Person p1 = new Person("张三", 20);
Person p2 = new Person("李四", 20);
boolean b1 = p1.equals(p2);
System.out.println(b1);//输出true
}
}
toString方法:
官方资料:String toString() 返回该对象的字符串表示
继续上边的Person类写个示例:
package demo; public class TestToString {
public static void main(String[] args) {
Person p1 = new Person("张三", 18);
String s1 = p1.toString();
System.out.println(s1);
System.out.println(p1);
}
}
/*
这里两个输出相同:
demo.Person@2cdb03a1
demo.Person@2cdb03a1 所以我们发现,输入语句中如果写的是一个对象,默认调用对象的toString方法
*/
其实得到内存地址没有什么实际意义,为了满足一些需求,所以我们重写下toString方法:
package demo; public class Person extends Object {
private String name;
private int age; public Person() {
} public Person(String name, int age) {
this.name = name;
this.age = age;
} //重写父类的toString方法
public String toString(){
return this.name+this.age;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
}
}
package demo; public class TestToString {
public static void main(String[] args) {
Person p1 = new Person("张三", 18);
String s1 = p1.toString();
System.out.println(s1);
System.out.println(p1);
}
}
/*
这里两个输出总是相同:
张三18
张三18 我们发现,输入语句中如果写的是一个对象,总是默认调用对象的toString方法
*/
Object还有其他方法,有些不常用,有些会在后边提到
Java学习笔记18(Object类)的更多相关文章
- 1.9(java学习笔记)object类及toString()与equals()方法
object类 java中objec是所有类公共的父类,一个类只要没有明显的继承某一类,那么它就是继承object类. 例如 class Person {......};和class Person e ...
- Java学习笔记之——Object类
所有类的祖先 如果一个类没有显式继承,则继承Object 每一个类都直接或间接的是Object的子类 相关API: protected Objectclone() 创建并返回此对象的副本. boole ...
- java学习笔记7--抽象类与抽象方法
接着前面的学习: java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--类与对象的基本概念(2) java学习笔记3--类与对象的基本概念(1) jav ...
- 吴裕雄--天生自然JAVA面向对象高级编程学习笔记:Object类
class Demo{ // 定义Demo类,实际上就是继承了Object类 }; public class ObjectDemo01{ public static void main(String ...
- Java学习笔记16---抽象类与接口的浅显理解
抽象类是由abstract修饰的类,定义方式如public abstract class A{...}. 接口由interface修饰,定义方式如public interface B{...}. 抽象 ...
- 【原】Java学习笔记031 - 常用类
package cn.temptation; public class Sample01 { public static void main(String[] args) { /* * 类 Math: ...
- 【原】Java学习笔记021 - Object
package cn.temptation; public class Sample01 { public static void main(String[] args) { // 类 Object: ...
- Java学习笔记day06_自定义类_ArrayList
1.自定义类class 使用类的形式, 对现实中的事物进行描述. 类是引用数据类型. 事物: 方法,变量. 方法:事物具备的功能. 变量:事物的属性. 格式: public class 类名{ //属 ...
- Java学习笔记(2)——有关类
Java类的高级特性: {Java管理文件机制:类包. 同一个包中的类互相访问时,可以不指定包名. 同一个包中的类不必存放在同一位置,如com.lang.class1和com.lang.class2可 ...
随机推荐
- 美杂志初次取得答应走进google奥秘研讨所Google X
Google X作为google最奥秘的研讨部分.开发过google眼镜.无人驾驶轿车等多项创新项目.至今为止.Google X从未答应媒体进入採訪.但近日,据日本GIGAZINE站点报导,美国杂志& ...
- Spring Cache简单介绍和使用
Spring Cache 缓存是实际工作中非经常常使用的一种提高性能的方法, 我们会在很多场景下来使用缓存. 本文通过一个简单的样例进行展开,通过对照我们原来的自己定义缓存和 spring 的基于凝视 ...
- Java -Xms -Xmx -Xss -XX:MaxNewSize -XX:MaxPermSize含义记录
出现java.lang.OutOfMemoryError异常时,常使用的方法便是将例如以下配置语句: -Xms512m -Xmx512m -Xss1024k -XX:MaxNewSize=256M - ...
- 游戏AI-行为树理论及实现
从上古卷轴中形形色色的人物,到NBA2K中挥洒汗水的球员,从使命召唤中诡计多端的敌人,到刺客信条中栩栩如生的人群.游戏AI几乎存在于游戏中的每个角落,默默构建出一个令人神往的庞大游戏世界. 那么这些复 ...
- SSM框架开发web项目系列(四) MyBatis之快速掌握动态SQL
前言 通过前面的MyBatis部分学习,已经可以使用MyBatis独立构建一个数据库程序,基本的增删查改/关联查询等等都可以实现了.简单的单表操作和关联查询在实际开的业务流程中一定会有,但是可能只会占 ...
- spring框架整合springMVC时关于AOP无法切入的问题
最开始springMVC的配置为: spring的配置为: 分析可知道spring的配置正确,由于在springmvc中已经扫描了@Controller相关的注解,所以就不需要再次扫描了,由于spri ...
- mybatis框架(5)---动态sql
那么,问题来了: 什么是动态SQL? 动态SQL有什么作用? 传统的使用JDBC的方法,相信大家在组合复杂的的SQL语句的时候,需要去拼接,稍不注意哪怕少了个空格,都会导致错误.Mybatis的动态S ...
- 查看当前支持的shell,echo -e相关转义符,一个简单shell脚本,dos2unix命令把windows格式转为Linux格式
/etc/shells [root@localhost ~]# more /etc/shells /bin/sh /bin/bash /sbin/nologin /usr/bin/sh /usr/bi ...
- JDK 1.8 源码阅读和理解
根据 一篇文章教会你,如何做到招聘要求中的“要有扎实的Java基础” 的指引,决定开始阅读下JDK源码. 本文将作为源码阅读总纲 一.精读部分 java.io java.lang java.util ...
- C#又能出来装个B了。一步一步微信跳一跳自动外挂
PS:语言只是载体.思维逻辑才是王道 前天看见了个python的脚本.于是装python.配置环境变量.装pip.折腾了一上午,最终装逼失败. 于是进入博客园,顶部有篇文章吸引了我 .NET开发一个微 ...