1.9(java学习笔记)object类及toString()与equa…
2018-07-19 05:37:57来源:博客园 阅读 ()
object类
java中objec是所有类公共的父类,一个类只要没有明显的继承某一类,那么它就是继承object类。
例如 class Person {......};和class Person extends Object{......}是一样的。如果我们的Studdent继承了Person类,继承结构就应该是
这时大家可能会想,为什么要默认继承object类,把objec类作为公共的父类有什么用?
object类作为公共的父类,那么所有的子类都可以调用Object类中的方法。
下列结束两个Object类中的方法
1.toString
我们看下列代码
1 package TestObject; 2 3 public class Person { 4 public static void main(String[] args){ 5 Student stu1 = new Student(); 6 System.out.println(stu1); 7 System.out.println(stu1.toString()); 8 } 9 10 } 11 12 class Student extends Person{ 13 void study(){ 14 System.out.println("学习中..."); 15 } 16 }
运行结果:
TestObject.Student@15db9742
TestObject.Student@15db9742
我们会发现运行的结果是一样的。我们在来看看object中toString()f方法的源码
1 public String toString() { 2 return getClass().getName() + "@" + Integer.toHexString(hashCode()); 3 }
前面是获取名称,后面是获取地址。
这个方法是Object类中的,是所有子类的公共父类,所以我们可以通过重写toString()方法来达到我们需要的功能。
1 package TestObject; 2 3 public class Person { 4 String name = "hcf"; 5 public static void main(String[] args){ 6 Student stu1 = new Student(); 7 System.out.println(stu1); 8 System.out.println(stu1.toString()); 9 } 10 11 } 12 13 class Student extends Person{ 14 void study(){ 15 System.out.println("学习中..."); 16 } 17 public String toString(){ 18 return name; 19 } 20 }
运行结果:
hcf
hcf
这样我们就重写了Object类中的toString()方法。
2.equals()
我们先看下object类中的equals()方法源码
1 public boolean equals(Object obj) { 2 return (this == obj);
可以看出,这个比较是直接比较地址值是否相等。
我们实际使用时可能认为,两个对象的内容相同就是相同的对象,可这时使用equals比较会出问题。因为对象的内容相同,但它们的存放地址是不同的,即不同的地址存放着相同的内容。
这是我就需要重写object类中equals方法,改写成对象的内容相同就代表它们相同。
下面是重写之后的equals方法。
1 package TestObject; 2 3 public class Person { 4 String name = "hcf"; 5 public static void main(String[] args){ 6 Student stu1 = new Student(); 7 Student stu2 = new Student(); 8 System.out.println(stu1 == stu2); 9 System.out.println(stu1.equals(stu2)); 10 } 11 } 12 13 14 class Student extends Person{ 15 void study(){ 16 System.out.println("学习中..."); 17 } 18 public String toString(){ 19 return name; 20 } 21 22 @Override //加上这个标记代表重写了该方法。 23 public boolean equals(Object obj) { //因为Object是所有对象的父类,所以可以使用Object来结束任意类型的对象,便于操作。 24 if(this == obj) //首先判断两个对象地址是否相同,地址相同则肯定死相同对象。 25 return true; 26 if(!(obj instanceof Student)) //然后在判断两个是不是同一类,如果类不想同,则不同。 27 return false; 28 Student stu = (Student)obj; //先将obj强制转型成Student,然后一个一个属性区比较 29 if(stu.name.equals(this.name)) //此时的equals是String类中的方法,作用是比较字符的内容是否相同。 30 return true; //stu.name是String形式,所以调用的是String中的equals方法, 31 else //String中也重写了equals方法,作用是比较字符串内容是否相等。 32 return false; 33 } 34 35 }
object类中一些方法我们会根据自己需要来重写。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- Java--反射(框架设计的灵魂)案例 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash