Java object类
来源:互联网 发布:程序员工作心得体会 编辑:程序博客网 时间:2024/06/04 21:56
前面有学到,class是Java的基本单元,如何创建一个class。一起看下创建class的关键页面,如下
用前面学到的继承知识,我们可以知道,在不修改继承的父类时,默认继承Object类。接下来我们学些下Object类。
一、Object类
1 .他是所有类的父类
2.如果一个类没有使用extends关键字明确标识继承另外一个类,那么这个类默认继承Object类
3.Object类中所有的方法适应于所有子类
4. object类我们常用的有两个方法: toString()方法和 equals()方法
二、关于toString()方法
1. 在Object类里面定义toString()方法的时候返回的对象的哈希code码(对象地址字符串)
2.可以通过重写toString()方法表示出对象的属性(相当于OC中的description方法)
我们看下例子: Dog继承Animal
public class Dog extends Animal { int age = 20; String name = "rose"; }
在main函数里面创建Dog类型对象,并输出该对象
public static void main(String[] args) { Dog dog = new Dog(); System.out.println(dog); }
输出结果: com.lemon.Dog@15db9742
从结果我们可以看到,输出的格式是 : 类名 + 内存地址
那我们想要得到对象的属性age 和name ,应该怎么做呢?很简单,改写父类的方法,相当于子类重写父类的方法,那么调用是优先调用子类的toString()方法。那重写格式规范呢? 我们可以利用快捷键去生成这个方法。
得到如下,我们可以选择性勾选需要描述的对象属性
在Dog类里面就生成toString() 方法如下
public class Dog extends Animal { int age = 20; String name = "rose"; @Override public String toString() { return "Dog [age=" + age + ", name=" + name + "]"; }}
此时,继续执行main方法,结果如下:
Dog [age=20, name=rose] // 对象的类型 ,属性值.相当于相当于OC中的description方法)
二、关于equals()方法
比较的是对象的引用是否指向同一块内存地址,一般情况下,比较两个对象时是比较他的值是否一致,那如何解决呢?思路也比较简单,重写equals()方法。
在不重写的情况下,我们先看下程序执行情况,创建两个相同类型的对象,并判断对象是否相等
public static void main(String[] args) { Dog dog = new Dog(); dog.name = "jack"; Dog dog1 = new Dog(); dog1.name = "jack"; System.out.println(dog); System.out.println(dog1); if(dog.equals(dog1)){ System.out.println("两个对象是相同的"); }else{ System.out.println("两个对象是不相同的"); } }
输出结果:
com.lemon.Dog@15db9742 // 以 @为分割符,前面是对象的类型,后面是对象的哈希值com.lemon.Dog@6d06d69c两个对象是不相同的
分析下 : 两个对象分别new了一次,开辟了两个不同内存空间,内存地址不同。object提供的equals() 是用来 比较的是对象的引用是否指向同一块内存地址。很显然,内存地址不一样,所以是不相等的,跟属性值是否否一样完全没有任何关系。
一般情况下,我们是需要判断对象的属性值相等的,那么如何重写 equals() 方法呢?系统也为我们提供了快捷键。操作如下:
得到如下页面
后,Dog出现如下方法,方法的解释也放在代码中一并进行解释如下:
public class Dog extends Animal { int age = 20; String name = "rose"; /* getClass() 得到的是一个类对象 相当于OC中的iskindOfClass方法 或者 object_getClassName()方法*/ @Override public boolean equals(Object obj) { if (this == obj) //两个对象的引用是否相同,如果相同,说明像个对象就是同一个 return true; if (obj == null) // 如果比较对象为空,不需要比较,肯定不相等 return false; if (getClass() != obj.getClass()) // 如果两个对象的类型是否相同,如果不同,肯定不相同 return false; Dog other = (Dog) obj; // 转化成相同类型后,判断属性值是否相同 if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; }}
此时,继续执行main方法,得到如下,很显然,我们得到我们想要的结果
com.lemon.Dog@15db9742com.lemon.Dog@6d06d69c两个对象是相同的
三、equals() 和 == 的区别
1、在Java中,任何类型的数据都可以用 “==”进行比较是不是相等,一般用于基本数据类型的比较,比较器存储的值是否相等。但是如果用于引用类型的比较,则是比较所指向对象的地址是否相等,在这点上,跟object类提供的equals()方法的作用是一致的。
2、对于 equals()方法
1) 首先,不能用于基本数据类型的变量之间的比较相等
2) 如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址
3) 诸如String、Date等类都对equals方法进行了重写,比较的是所指向的对象的内容
- Java Object 类分析
- java.lang.Object类
- java.lang.Object类
- java.lang.Object类
- JAVA OBJECT 类
- JAVA Object类-equals()
- JAVA Object类 toString()
- Java中的Object类
- java object 类
- Java知识点:Object类
- Java知识点:Object类
- java的Object类
- java中的object类
- java自学 Object类
- Java中的Object类
- java Object类
- Java中的Object类
- Java Object类
- C++第五次实验
- python标准库手记【3】
- hibernate主要测试方法
- 小易的升级之路(网易笔试)
- java设计模式之组合模式
- Java object类
- CSS动画:
- ssh远程登录
- 【Effection C++】读书笔记 条款26:尽可能延后变量定义式的出现时间
- 关于threadlocal
- 弹窗遮罩的几种实现方式
- React Native 从入门到原理
- Web11页面布局
- mybatis 动态sql