1、hashCode()方法示例
1 public class StringDemo { 2 public static void main(String[] args){ 3 Student student = new Student(); 4 System.out.println(student); 5 System.out.println(student.hashCode()); 6 } 7 } 8 9 class Student{ 10 String name = "FZY"; 11 }
● 结果:Student@324e68fb //打印的地址值
843999483 //打印哈希算法后的地址值整值
● 注意:这里打印的不是对象的实际地址值,可以理解为逻辑地址值
2、getClass()方法示例
1 public class StringDemo { 2 public static void main(String[] args){ 3 Student student = new Student(); 4 Class clazz = student.getClass();//获取该对象的字节码文件 5 System.out.println(clazz);//打印字节码文件 6 System.out.println(clazz.getName());//打印字节码文件名 7 } 8 } 9 10 class Student{ 11 String name = "FZY"; 12 }
● 结果:class Student //该对象的字节码文件
Student //字节码文件名
3、toString()方法示例
● 源代码:
1 public String toString() { 2 return getClass().getName() + "@" + Integer.toHexString(hashCode()); 3 }
由于 Object 中的 toString() 方法没有任何实际意义,所以子类通常会重写 toString()方法。
1 public class StringDemo { 2 public static void main(String[] args){ 3 Student student = new Student(); 4 System.out.println(student.toString()); 5 } 6 } 7 8 class Student{ 9 String name = "FZY"; 10 @Override 11 public String toString() { 12 return "Student [name=" + name + "]"; 13 } 14 }
● 结果:Student [name=FZY] //重写 toString() 方法后打印的结果
4、equals()方法示例
● 源代码:
1 public boolean equals(Object obj) { 2 return (this == obj); 3 }
●示例:
1 public class StringDemo { 2 public static void main(String[] args){ 3 Student student1 = new Student(); 4 Student student2 = new Student(); 5 boolean b = student1.equals(student2); 6 System.out.println(b); 7 } 8 } 9 10 class Student{ 11 12 }
● 结果:false
● 注:比较地址值,和“==”效果一样,一般没有意义,需要重写equals()方法
● 重写 equals()方法示例:
1 public class StringDemo { 2 public static void main(String[] args){ 3 Student student1 = new Student("小红",10); 4 Student student2 = new Student("小红",10); 5 boolean b = student1.equals(student2); 6 System.out.println(b); 7 } 8 } 9 10 class Student{ 11 String name; 12 int age; 13 public Student(){ 14 } 15 public Student(String name, int age) { 16 this.name = name; 17 this.age = age; 18 } 19 @Override 20 public boolean equals(Object obj) { 21 if(obj == null){//判断对象是否为空 22 return false; 23 } 24 if(this == obj){ 25 return true; 26 } 27 if(!(obj instanceof Student)){ 28 return false; 29 } 30 Student student = (Student)obj;//向下转型 31 return this.age == student.age && this.name.equals(student.name); 32 } 33 }
● 结果:true //重写equals方法是比较成员变量的值相等
● 注意:==和equals区别
==是一个比较运算符,可以比较基本数据类型的值和引用数据类型的地址值;
equals是个方法,只能比较引用数据类型,没有重写是Object类中的equals方法,和==号比较引用数据类型无区别,重写后的equals方法是比较对象中的属性。
● instanceof关键字:判断这个引用是否为该类型的引用