java——Object类与包装类的小结

本文主要介绍Java中的Object类和包装类。Object类是所有类的父类,提供了toString()、equals()等方法,可接收所有引用类型。包装类将基本类型封装到类中,有数值型和对象型,JDK1.5后有自动拆装箱机制,还给出了基本类型和包装类的使用建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Object类

Object类是所有类的父类,所有类默认继承Object类。

1.toString():取得对象信息

class Person{
   private String name ;
   private int age ;
   public Person(String name, int age) {
      this.age = age ;
      this.name = name ;
   }
}
class Student{}
public class Test {
   public static void main(String[] args) {
      fun(new Person("zhangsan",22) );
      fun("你好");
   }
   public static void fun(Object obj) {
      System.out.println(obj.toString()); // 默认输出对象调用的就是toString()方法
   }
}

System.out.println()系统输出输出对象时,默认会调用该对象的toString(),若自定义类需要进行内容的输出,需要覆写toString()。

class Person{
   private String name ;
   private int age ;
   public Person(String name, int age) {
      this.age = age ;
      this.name = name ;
   }
  public String toString() {
      return "姓名:"+this.name+",年龄:"+this.age ;
   }
}
class Student{}
public class Test {
   public static void main(String[] args) {
      fun(new Person("张三",22) );
      fun("你好");
   }
   public static void fun(Object obj) {
      System.out.println(obj.toString()); // 默认输出对象调用的就是toString()方法
   }
}

2.equals():比较两个对象内容

class Person{
   private String name ;
   private int age ;
   public Person(String name, int age) {
      this.age = age ;
      this.name = name ;
   }
   public String toString() {
      return "姓名:"+this.name+",年龄:"+this.age ;
   }
   public boolean equals(Object obj) {
      if (obj == null) {
         return false ;
      }
      if(this == obj) {
         return true ;
      }
// 不是Person类对象
      if (!(obj instanceof Person)) {
         return false ;
      }
      Person person = (Person) obj ; // 向下转型,比较属性值
      return this.name.equals(person.name) &&
       this.age==person.age ;
   }
}
class Student{}
public class Test {
   public static void main(String[] args) {
      Person per1 = new Person("yuisama", 20) ;
      Person per2 = new Person("yuisama", 20) ;
      System.out.println(per1.equals(per2));
   }
}

Object类提供的equals默认比较两个对象的地址是否相同。

return(this==obj);

3.Object类可以接收所有引用类型,包括接口与数组。

Object类接收数组对象:

public static void main(String[] args) {
   // Object接收数组对象,向上转型
   Object obj = new int[]{1,2,3,4,5,6} ;
   // 向下转型,需要强转
   int[] data = (int[]) obj ;
   for(int i :data){
      System.out.println(i+"、");
   }
}

Object接收接口对象:

interface IMessage {
   public void getMessage() ;
}
class MessageImpl implements IMessage {
   public String toString() {
      return "I am person" ;
}
   public void getMessage() {
      System.out.println("你好");
   }
}
public class Test {
   public static void main(String[] args) {
      IMessage msg = new MessageImpl() ; // 子类向父接口转型
      Object obj = msg ; // 接口向Obejct转型
      System.out.println(obj);
      IMessage temp = (IMessage) obj ; // 强制类型转换
      temp.getMessage();
   }
}

Object类是参数的最高统一类型。

二、包装类:将基本类型封装到类中

数值型(Number的子类):Byte、Short、Integer(int)、Long、Float、Double
对象型(Object的子类):Boolean、Character(char)

装箱与拆箱
装箱:将基本数据类型变为包装类对象,通过每个包装类的构造方法实现装箱处理。
拆箱:将包装类中包装的基本数据类型取出,利用包装类提供的xxValue()方法
Integer提供的intValue()。

Integer num = new Integer(55) ; // 装箱
int data = num.intValue() ; // 拆箱

在JDK1.5之后,提供了自动拆装箱的机制,最为重要的是由于此类机制的存
在,可以直接利用包装类的对象进行各种数学计算。

// 自动装箱
Integer x = 55 ;
// 可以直接利用包装类对象操作
System.out.println(++x * 5 );

使用包装类与使用基本类型在用法上基本一致。

那么是用基本类型还是包装类?
1.[强制]所有POJO类(类中只有属性与getter/setter,构造方法)使用包装类;
2.局部变量推荐使用基本类型。

包装类进行数值比较使用equals方法。
阿里编码规范:所有的相同类型的包装类对象之间值的比较,全部使用 equals 方法比较。

对于 Integer var = ? 在-128 至 127 范围内的赋值,Integer 对象是在IntegerCache.cache 产生,会复用已有对象,这个区间内的 Integer 值可以直接使用==进行判断,但是这个区间之外的所有数据,都会在堆上产生,并不会复用已有对象,这是一个大坑,推荐使用 equals 方法进行判断。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值