文章目录
Object类
Object类是一个特殊的类,是所有类的父类
,如果一个类没有用extends明确指出继承于某个类,那么它默认继承Object类。
接下来,我们从最常用的说起:
(1)toString()
取得对象信息的方法
:toString()- 该方法在打印对象时被调用,将对象信息变为字符串返回,默认输出对象地址。
- 示例:
public class student {
public String name= "Mary";
public int age = 21;
}
Test.java
public class Test{
public static void main(String[] args)
{
Student s = new Student();
System.out.println("姓名:"+s.name+",年龄:"+s.age);//输出对象属性
System.out.println(s);//直接输出对象信息
System.out.println(s.toString());//调用父类方法输出对象信息
}
}
输出结果:
(1-2)重写toString()
student.java
public class student {
public String name= "zhang";
public int age = 21;
@Override
public String toString() {
return "student{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
}
Student.java
class Student {
public static void main(String[] args) {
student s=new student();
System.out.println(s.toString());
}
}
输出结果:
(1-结论)
为什么定义实体类的时候,
domain要toString()
,否则输出的不是值,而是地址
(2)equles
对象相等判断方法
:equals()- 该方法用于比较对象是否相等,而且此方法必须被重写。
- 示例:
public class student {
//2、equles
String name;
int age;
public student(String name,int age)
{
this.name=name;
this.age=age;
}
}
public static void main(String[] args)
{
student s1 = new student("Mary",21);
student s2 = new student("Mary",21);
System.out.println(s1.equals(s2));//输出一个boolean值
System.out.println(s1.equals(s2)?"s1和s2是同一个人":"s1和s2不是同一个人");//?:条件运算符
}
输出结果:
(2-2)重写equles
//重写父类(Object类)中的equals方法
public String name;
public int age;
public student() {
}
public student(String name,int age)
{
this.name=name;
this.age=age;
}
public boolean equals(Object o) {
if(o ==null) {
return false;
}if(this==o){
return true;
}if(!(o instanceof student)){
return false;
}
student s = (student) o;
return this.age==s.age&&this.name.equals(s.name);//返回一个布尔值
}
public static void main(String[] args)
{
student s1 = new student("Mary",21);
student s2 = new student("Mary",21);
boolean b=s1.equals(s2);
System.out.println(s1==s2);
System.out.println(b);
}
(2-结论)
==
和equals
区别:
①==
是一个比较运算符,可以比较基本数据类型的值和引用数据类型的地址值;
②equals是个方法,只能比较引用数据类型,没有重写是Object类中的equals方法,和==号比较引用数据类型无区别,重写后的equals方法是比较对象中的属性。- instanceof关键字:判断这个引用是否为该类型的引用。
(3)getClass()
public class Demo2 {
public static void main(String[] args) {
Object o=new Object();//创建对象
Class clazz=o.getClass();//获取该对象的字节码文件
System.out.println(clazz);//打印字节码文件
System.out.println(clazz.getName());//打印该对象字节码文件名
}
}
(3-2)加类
public class student {
}
public class Demo2 {
public static void main(String[] args) {
student s=new student();//创建对象
Class clazz=s.getClass();//获取该对象的字节码文件
System.out.println(clazz);//打印字节码文件
System.out.println(clazz.getName());//打印该对象字节码文件名
}
}
(4)hashCode()
对象签名
:hashCode()- 该方法用来返回其所在对象的物理地址(哈希码值),常会和equals方法同时重写,确保相等的两个对象拥有相等的.hashCode。
public class student {
String name="zss";
}
public class Demo1 {
public static void main(String[] args) {
student s=new student();
System.out.println(s);
System.out.println(s.hashCode());
}
}
(4-2)与equles合用
class student(){
String name;
int age;
//重写父类(Object类)中的equals方法
public boolean equals()
{
boolean temp;
student s1 = new student();
s1.name="张三";s1.age=12;
student s2 = new student();
s2.name="张三";s2.age=12;
System.out.println("s1的哈希码:"+s1.hashCode());
System.out.println("s2的哈希码:"+s2.hashCode());
if((s1.name.equals(s2.name))&&(s1.age==s2.age))
{
temp = true;
}
else
{
temp = false;
}
return temp;
}
//重写hashCode()方法
public int hashCode()
{
return age*(name.hashCode());
}
}
public static void main(String[] args)
{
student s3 = new student();
System.out.println(s3.equals()?"s1和s2是同一人":"s1和s2不是同一人");
}