zoukankan      html  css  js  c++  java
  • 二十、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
        }
    }
  • 相关阅读:
    下载并使用ASP.NET MVC v1.0 Futures
    关于DataGridView的数据源两个值得注意的小问题
    C++网络编程(二)客户端服务器程序
    C++多态、继承的简单分析
    XML文件解析器TXml
    数组
    CTS类型系统
    光阴不会虚度
    软件的大规模生产
    微创新和山寨的关系
  • 原文地址:https://www.cnblogs.com/chushujin/p/10123077.html
Copyright © 2011-2022 走看看