二十、Java基础之Object类
/*
一、关于object中的toString方法:
1. 定义:toString返回该对象的字符串的表示
2. 在现实的开发中,Object 中的方法已经不够用了,
因为Object汇总的toString方法显示的结果不满意
Object中的toSting方法就是要被重写的
3.SUN中是这样实现的toString方法:
public String toString(){
return getclass().getName()+"@"+Intege.toHexString(hashCode());
}
Object中的toString方法的放回:类名@java对象的内存地址经过哈希算法得出的int类型值再转换成十六进制
这个输出结果可以等同看做java对象在内存中的地址
*/
public class ToString { public static void main(String[] args){ //创建一个Object类型对象 Object o=new Object(); //调用toString方法 String oStr=o.toString(); System.out.println(oStr);//java.lang.Object@4554617c //创建一个Person对象 Person p=new Person("小黄",12); //调用toString方法 String pStr=p.toString(); System.out.println(pStr); Person p2=new Person("hahaha",22); //print后面括号中如果是一个引用类型,会默认引用类型的toString方法 System.out.println(p2.toString());//Person[name=hahaha,age=22] System.out.println(p2);//Person[name=hahaha,age=22] } } class Person{ String name; int age; Person(){} Person(String name,int age){ this.name=name; this.age=age; } //重写toString方法 //根据项目的需求而定 //项目规定,显示格式:Person[name=AAA,age=50] public String toString(){ return "Person[name="+name+",age="+age+"]"; } }
/*
二、关于Object中的equals方法
sun中:
public boolean equals(Object obj) {
return (this == obj);
}
o1.equals(o2);o1是this,o2是obj
==两边如果是引用类型,则比较内存地址,地址相同则true,反之false
Object中的equals方法比较的是两个引用的内存地址
java对象中的equals方法设计的目的:判断两个对象是否一样。
*/
public class equalsMethod { public static void main(String[] args){ Object o1=new Object(); Object o2=new Object(); boolean b1=o1.equals(o2); System.out.println(b1);//false Star s1=new Star(100,"小明"); Star s2=new Star(100,"小明"); System.out.println(s1==s2);//false System.out.println(s1.equals(s2));//true } } class Star{ //身份证号 int id; //姓名 String name; //Constructor public Star(int id,String name){ this.id=id; this.name=name; } //Object中的euqals方法比较的是内存地址 //在现实业务中,不应该比较内存地址,应该比较内容, //所以Object中的equals方法也需要重写 //根据需求规定重写equals方法:如果身份证号一致,并且名字一致,则表示一个人 public boolean equals(Object obj) { if(obj instanceof Star){ //强制类型转换 Star s=(Star)obj; if(s.id==id && s.name.equals(name)){ return true; } } return false; } }
/*
三、在java比较两种字符串是否一致
不能使用“==”
只能调用String类的equals方法
*/
public class TestStringAndString { public static void main(String[] args){ String s1=new String("ABC"); String s2=new String("ABC"); System.out.println(s1==s2);//false //String 已经重写了Object中的equals方法,比较内容。 System.out.println(s1.equals(s2));//true } }
/*
四、关于Object中的finalize方法:
fianlize方法什么时候调用?
1.finalize方法每个java对象都有;
2.fianlize方法不需要程序员去调用,有系统自动调用
3.java对象如果没有更多的引用指向它,则该java对象,成为垃圾数据,
等待垃圾回收器的回收,垃圾回收器在回收这个java对象之前会自动启动调用该对象的finalize
*/
public class TestFinalize { public static void main(String[] args){ A a=new A(); a=null; //程序员只能建议垃圾回收器回收垃圾 System.gc();//Object类.A@25900a5a马上就被要回收了! } } class A{ //重写Object中的finalize方法 public void finalize() throws Throwable{ System.out.println(this+"马上就被要回收了!"); } //让引用再次重新指向该对象,该对象不是垃圾数据,不会被垃圾回收器回收! A a= this; }
/*
五、关于hashCode
*/
public class TestHashCode { public static void main(String[] args){ TestHashCode t=new TestHashCode(); System.out.println(t.hashCode());//1163157884 } }
当有些人一出生就有的东西,我们要为之奋斗几十年才拥有。但有一样东西,你一辈子都不会有,那就是我们曾经一无所有。