JAVASE(十二)常用类(一)Object类
目录
一、API
二、Object类
1.toString()方法
2.equals方法
一、API
API文档是一个说明文档,记载了java官方预先定义的类和接口的功能,以及函数的功能。目的是给开发人员提供使用帮助说明。
二、Object类
Object类属于根基类,当一个类没有指明继承的父类时,会默认该类继承Object类。
1.toString()方法
Object中该方法用于返回当前对象的有关信息。当一个类中没有重写该方法的时候,就会自动调用Object类中的该方法。
其中 getClass().getName()指的是返回当前类名(即包名+类名),Integer.toHexString(hashCode())中hashCode()是拿到当前对象在内存空间中的哈希值(为10进制),Integer.toHexString()是指调用Integer类的toHexString方法,可以将拿到的哈希值转为16进制。
根据需要可以在用户自定义的类型中重写该方法。
如:定义一个Human,然后创建并输出该类对象。
结果如下:
此时就调用的是Object类中的toString方法。
如果在Human类中对该方法重写,返回名字,即:
再次运行主方法,结果如下:
2.equals方法
在前面运算符中==用来比较两个值是否相等。之前在对象引用中有提到过,事实上引用类型的变量的值的是该类型对象的地址,所以用==就比较的是对象的地址。
比如:
因为两个变量对应两个对象,每次创建对象就会分配一个内存地址,对象的地址也就是变量的值并不相等;所以使用==时,结果为false。
但有时候,我们想去比较的是对象的内容。这时候就可以用equals方法:
注意此时输出里写的并不是h1.equals(h2)。原因是我们目前在Human类中没有重写equals方法,这样就会调用Object类中的equals方法;而Human类中的name属性是String类,在String类中已经重写了该方法。所以图片里调用的是String类中的equals方法。这样输出结果就是true。
Object类中的equals方法如下,实际就是直接比较两个对象的地址。和==效果一样:
而String类中进行如下重写,即先判断是否为同一个对象,如果是就直接返回true:否则判断方法传进来的参数是否属于String类,如果是就向下转型,随后根据两个字符串的长度和每个位置对应的字符进行比较,如果相等就返回true,有一个不符合就返回false。
而对于两个String类型的变量,如果都直接进行赋值,那么也可以用==比较,如下:
输出结果为true,这是因为String类型的字符串驻留的特性,即java会在字符串常量池中存储唯一实例, 当多次使用相同字面量时,会直接引用池中的同一对象,避免重复创建新对象,节省内存。
注意和以下写法区分。当用构造方法时,就会绕过字符串常量池,强制创建新对象:
此时输出中比较的就是两个对象的地址,结果就为false。