zoukankan      html  css  js  c++  java
  • Object

    package com.Object;
    
    public class Test01{
        public static void main(String[] args){
            Test01 ts=new Test01();
            ts.textEquals();
            Student s=new Student();
            
            
        }
        public void testGetClass(){
            //Object的getClass()方法返回的是一个该类的class对象,一般使用该class对象的getName方法获取类名
            Student s=new Student();
            System.out.println(s.getClass());
            System.out.println(s.getClass().getName());
            Object o=new Object();
            System.out.println(o.getClass().getName());
            
        }
        public void testHashCode(){
            //HashCode()获取的是Object对象的哈希值。哈希值,其实是对象的地址值的一种经过特殊处理后的形式
            Student s=new Student();
            System.out.println(s.hashCode());
        }
        public void testToString(){
            /*
             * 默认情况下,对象的toString方法返回的是它的类名+@+哈希码的十六进制表示
             * 这种表示一般没有意义,因为地址值我们一般没有作用,所以我们一般将它重写成为输出所有的成员变量
             * 使用myeclipes的source+Generate toString...可以自动生成
             */
            Student s=new Student();
            System.out.println(s.toString());
            //System.out.println(s.getClass().getName());
            //System.out.println("@");
            //System.out.println(s.hashCode());
            //System.out.println(Integer.toHexString(s.hashCode()));
            System.out.println(s.getClass().getName()+"@"+Integer.toHexString(s.hashCode()));
        }
        public void textEquals(){
            /*
             * 常量类型的比较==是对值得比较
             * 引用类型的比较==是对内存地址的比较
             * 默认的hashCode()得到的是内存地址的hashCode,所以默认情况下==的比较相当于hashCode的比较
             * 对象的equals默认是==一样的,这个是通过查看源码发现的。
             * 所以默认情况下==和equals和hashCode比较得到的值是一致的。
             * equals可以重写。 
             * 因为针对内存地址的比较结果不是我们想要的,一般我们需要的是针对成员变量值得比较,所以一般重写
             * 一般重写equals方法往往需要重写hashCode方法。
             * 
             * instanceOf 关键字可以判断前者是不是后者的子元素
             */
            Student s=new Student("林青霞",27);
            Student s1=new Student("林青霞",27);
            System.out.println(s.equals(s1));//重写之后比较的就是值得hashCode了。String对象的equals方法比较的是值
        }
        public void testClone(){
            Student s=new Student("林青霞",28);
            Student s2=s;
            s2.setName("林青霞");
            s2.setAge(30);
            System.out.println(s+"
    "+s2);
            /*
             * clone()方法不是想用就可以用,必须实现Cloneable接口才可以使用这个方法。
             * clone()方法得到的对象是原来对象的复制品,属性的值都相同,地址值不同,也就是开辟了一块新的空间存储了一样的值
             */
        }
    }
    /*
     类Object
     java.lang.Object
     版本从JDK1.0开始
     类Object是类层次结构的根类。每个类都直接或者间接继承这个类
     
     拥有构造方法:
     Object()
     这里主要讲几个方法:
         getClass() 返回此Object的运行时类
         hashCode() 返回该对象的哈希码值
         toString() 返回该对象的字符串表示
         clone()    克隆该对象
     */
  • 相关阅读:
    Visual Studio 插件的开发
    EntityFramework 4.x 使用中遇到的问题 (2)
    F#学习笔记核心类型(二)
    F#学习笔记函数式编程(一)
    EntityFramework 4.x 使用中遇到的问题 (1)
    vue3项目一些小坑
    记一种拖拉拽编排流程的思路
    隐藏Jenkinsfile敏感信息
    Jenkins条件判断
    Jenkins 流水线语法自动部署
  • 原文地址:https://www.cnblogs.com/aigeileshei/p/5549308.html
Copyright © 2011-2022 走看看