ToB企服应用市场:ToB评测及商务社交产业平台

标题: Java常用类-Object(8个未完待续...) [打印本页]

作者: 愛在花開的季節    时间: 2024-11-26 05:40
标题: Java常用类-Object(8个未完待续...)
Java Object 类是全部类的父类,也就是说 Java 的全部类都继承了 Object,子类可以使用 Object 的全部方法
Object 类位于 java.lang 包中,编译时会自动导入,我们创建一个类时,如果没有明确继承一个父类,那么它就会自动继承 Object,成为 Object 的子类。

1 equals方法

Object equals() 方法用于比力两个对象是否相称。
equals() 方法比力两个对象,是判定两个对象引用指向的是同一个对象,即它只是检查两个对象是否指向内存中的同一个地址
注意:如果子类重写了equals() 方法,就必要重写hashCode();好比 String 类重写了 equals() 方法,同时也重写了 hashCode() 方法。
语法:object.equals(Object obj)
String重写equals方法:
  1. public boolean equals(Object anObject) {
  2.     if (this == anObject) {//如果是同一个对象
  3.         return true;//返回 true
  4.     } if
  5.     (anObject instanceof String) {//判断类型
  6.         String anotherString = (String)anObject;//向下转型
  7.         int n = value.length;
  8.         if (n == anotherString.value.length) {//如果长度相同
  9.             char v1[] = value;
  10.             char v2[] = anotherString.value;
  11.             int i = 0;
  12.             while (n-- != 0) {//然后一个一个的比较字符
  13.                 if (v1[i] != v2[i])
  14.                     return false;
  15.                 i++;
  16.             }
  17.             return true;//如果两个字符串的所有字符都相等, 则返回 true
  18.         }
  19.     }
  20.     return false;//如果比较的不是字符串, 则直接返回 false
  21. }
复制代码

2 类中重写equals方法

  1. /**
  2. * @ClassName EqualsMethodTest
  3. * @Description
  4. * @Date 2024/11/25 21:24
  5. * @Version V1.0
  6. */
  7. public class EqualsMethodTest {
  8.     public static void main(String[] args) {
  9.         Person p1= new Person("小明",18,true);
  10.         Person p2= new Person("小华",18,false);
  11.         Person p3= new Person("小明",19,true);
  12.         Person p33= new Person("小明",19,true);
  13.         System.out.println(p3.equals(p33));//true
  14.         p33.setAge(20);
  15.         System.out.println(p1.equals(p2));//false
  16.         System.out.println(p3.equals(p33));//false
  17.     }
  18. }
  19. class Person{
  20.     private String name;
  21.     private int age;
  22.     private boolean gender;
  23.     public Person(String name,int age,boolean gender){
  24.         this.name=name;
  25.         this.age=age;
  26.         this.gender=gender;
  27.     }
  28.     @Override
  29.     public boolean equals(Object obj) {
  30.         if(this==obj) return true;//同一个对象,直接返回
  31.         if(obj instanceof Person){//是Person,才比较
  32.             Person p = (Person) obj;
  33.             return this.name==p.name&&this.age==p.age&&this.gender==p.gender;
  34.         }
  35.         return false;//不是person,返回false
  36.     }
  37.     public String getName() {
  38.         return name;
  39.     }
  40.     public void setName(String name) {
  41.         this.name = name;
  42.     }
  43.     public int getAge() {
  44.         return age;
  45.     }
  46.     public void setAge(int age) {
  47.         this.age = age;
  48.     }
  49.     public boolean isGender() {
  50.         return gender;
  51.     }
  52.     public void setGender(boolean gender) {
  53.         this.gender = gender;
  54.     }
  55. }
复制代码

3 HashCode

public int hashCode()
返回该对象的哈希码值。支持此方法是为了提高哈希表(例如 java.util.Hashtable 提供的哈希表)的性能。
hashCode 的常规协定是:

实际上,由Object 类定义的 hashcode 方法确实会针对不同的对象返回不同的整数。(这一般是通过将该对象的内部地址转换成一个整数来实现的,但是 Java不必要这种实现技巧。)
return:此对象的一个哈希码值。
   
  1. package day111;
  2. /**
  3. * @ClassName HashCodeTest
  4. * @Description
  5. * @Date 2024/11/25 22:00
  6. * @Version V1.0
  7. */
  8. public class HashCodeTest {
  9.     public static void main(String[] args) {
  10.         AA aa = new AA();
  11.         AA aa2 = new AA();
  12.         AA aa3 = aa;
  13.         System.out.println("aa.hashCode()=" + aa.hashCode());//aa.hashCode()=793589513
  14.         System.out.println("aa2.hashCode()=" + aa2.hashCode());//aa2.hashCode()=824909230
  15.         System.out.println("aa3.hashCode()=" + aa3.hashCode());//aa3.hashCode()=793589513
  16.     }
  17. }
  18. class AA{}
复制代码

4 toString

  1. public String <strong>toString</strong>()
  2. 返回该对象的字符串表示。通常,toString方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂的信息表达式。建议所有子类都重写此方法。
  3. Object类的toString方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@
  4. ”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:
  5. getClass().getName() + '@' + Integer.toHexString(hashCode())
  6. <strong>return:</strong>该对象的字符串表示形式。
复制代码
  1. package day111;
  2. /**
  3. * @ClassName toStringTest
  4. * @Description
  5. * @Date 2024/11/25 22:04
  6. * @Version V1.0
  7. */
  8. public class toStringTest {
  9.     public static void main(String[] args) {
  10.     /*
  11.     Object 的 toString() 源码
  12.         (1)getClass().getName() 类的全类名(包名+类名 )
  13.         (2)Integer.toHexString(hashCode()) 将对象的 hashCode 值转成 16 进制字符串
  14.         public String toString() {
  15.         return getClass().getName() + "@" + Integer.toHexString(hashCode());
  16.         }
  17.     */
  18.         Monster monster = new Monster("小妖怪", "巡山的", 1000);
  19.         System.out.println(monster.toString() + " hashcode=" + monster.hashCode());
  20.         System.out.println("==当直接输出一个对象时, toString 方法会被默认的调用==");
  21.         System.out.println(monster); //等价 monster.toString()}
  22.     }
  23. }
  24. class Monster {
  25.     private String name;
  26.     private String job;
  27.     private double sal;
  28.     public Monster(String name, String job, double sal) {
  29.         this.name = name;
  30.         this.job = job;
  31.         this.sal = sal;
  32.     }
  33.     //重写 toString 方法, 输出对象的属性
  34.     //使用快捷键即可 alt+insert -> toString
  35.     @Override
  36.     public String toString() { //重写后, 一般是把对象的属性值输出, 当然程序员也可以自己定制
  37.         return "Monster{" +
  38.                 "name='" + name + '\'' +
  39.                 ", job='" + job + '\'' +
  40.                 ", sal=" + sal +
  41.                 '}';
  42.     }
  43. }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4