Object类和包装类

发布时间:2024年01月19日

Object类? ? ??

? ?object的定义:

? ? 在Java中,Object类是所有类的根类。它是一个内置的类,位于java.lang包中。Object类定义了一些所有类都可继承和使用的通用方法。

Object类的主要目的

是提供统一的方法来操作和处理所有Java对象。它定义了以下常用方法:

  1. equals()方法:用于检查两个对象是否相等。默认情况下,它比较对象的引用,但可以在子类中重写该方法以改变比较的逻辑。
  2. hashCode()方法:返回对象的哈希码值。该方法通常与equals()方法一起使用,以确保在对象放入哈希表等数据结构时能够正确地定位对象。
  3. toString()方法:返回对象的字符串表示。默认情况下,它返回对象的类名和哈希码,但可以在子类中重写该方法以提供更有意义的字符串表示。
  4. getClass()方法:返回对象的运行时类。可以用于获取对象的类名和类的其他信息。
  5. wait()、notify()和notifyAll()方法:用于支持线程同步和互斥。这些方法通常与synchronized关键字一起使用,以确保线程的正确执行和协调。
  6. clone()方法:用于创建并返回对象的副本。默认情况下,它会调用Object类中的clone()方法,但可以在子类中重写该方法以提供浅拷贝或深拷贝的功能。
  7. finalize()方法:在对象被垃圾回收器回收之前调用。子类可以重写该方法以执行一些清理操作。

Object类在Java中的用途非常广泛。它提供了一种通用的方式来操作对象,比如比较、转换为字符串、复制等。此外,Object类也为Java提供了面向对象的特性,比如继承、多态、封装等提供了基础。由于所有的类都默认继承自Object类,因此Object类的方法可以在任何类的对象上调用,使得代码更加灵活和可扩展。

toString()与equals().

package object;

/**
?* Object是所有类的顶级超类.里面有几个经常被子类重写的方法,其中包括toString和equals
?*/
public class Demo {
? ? public static void main(String[] args) {
? ? ? ? Point p = new Point(1,2);
? ? ? ? /*
? ? ? ? ? ? Object已经实现了toString方法.直接继承下来时返回的字符串内容为当前对象的地址信息.格式为:类名@地址.
? ? ? ? ? ? toString方法实际开发中很少直接写代码去调用它,都是在不经意间被自动执行的.
? ? ? ? ? ? 例如在使用System.out.println输出时.与字符串连接操作时.
? ? ? ? ?*/
? ? ? ? //System.out.println(Object obj)输出给定对象toString返回的字符串到控制台
? ? ? ? System.out.println(p);

? ? ? ? //字符串连接操作时,会将非String类型的对象调用toString转换为字符串后拼接.
? ? ? ? String line = "这是一个Point:" + p;
? ? ? ? System.out.println(line);

? ? ? ? Point p2 = new Point(1,2);
? ? ? ? System.out.println("p2:"+p2);
? ? ? ? /*
? ? ? ? ? ? 对于引用类型而言,变量保存的值是对象的地址.
? ? ? ? ? ? ==比较是比较两个变量的值是否相等,因此对于引用类型而言就是比较地址是否相等,那么意思就是比较是否为同一个对象.

? ? ? ? ? ? equals是Object定义的另一个方法,意图是比较两个对象的内容是否相同.但是如果子类不重写这个方法,则没有实际意义,因为Object实现时内部仍然是用==比较的!
? ? ? ? ?*/
? ? ? ? System.out.println(p == p2);//false
? ? ? ? System.out.println(p.equals(p2));//true
? ? }
}

包装类

? ? ? java定义了8个包装类,目的是为了解决基本类型不能直接参与面向对象开发的问题,使得基本类型可以通过包装类的实例以对象的形式存在.
? ? 其中数字类型的包装类都继承自java.lang.Number,而char和boolean的包装类直接继承自Object
? ? Number是一个抽象类,定义了一些方法,目的是让包装类可以将其表示的基本类型转换为其他数字类型.


package integer;

public class IntegerDemo1 {
? ? public static void main(String[] args) {
? ? ? ? //基本类型转换为包装类
? ? ? ? int i = 123;
? ? ? ? //java推荐我们使用包装类的静态方法valueOf将基本类型转换为包装类,而不是直接new
? ? ? ? Integer i1 = Integer.valueOf(i);//Integer会重用-128-127之间的整数对象
? ? ? ? Integer i2 = Integer.valueOf(i);
? ? ? ? System.out.println(i1==i2);//true
? ? ? ? System.out.println(i1.equals(i2));//true

? ? ? ? double dou = 123.123;
? ? ? ? Double dou1 = Double.valueOf(dou);//Double则是直接new
? ? ? ? Double dou2 = Double.valueOf(dou);
? ? ? ? System.out.println(dou1==dou2);//false
? ? ? ? System.out.println(dou1.equals(dou2));//true

? ? ? ? //包装类转换为基本类型
? ? ? ? int in = i1.intValue();//获取包装类对象中表示的基本类型值
? ? ? ? double doub = i1.doubleValue();
? ? ? ? System.out.println(in);//123
? ? ? ? System.out.println(doub);//123.0

? ? ? ? in = dou1.intValue();//大类型转小类型可能存在丢精度!
? ? ? ? doub = dou1.doubleValue();
? ? ? ? System.out.println(in);//123
? ? ? ? System.out.println(doub);//123.123
? ? }
}

? ? 包装类的常用功能?? ? ? ?

? ? ? ? ?包装类是为了将基本数据类型转换为对象而设计的。包装类提供了一些常用的功能,包括以下几种:

  1. 自动装箱和拆箱:包装类允许将基本数据类型自动转换为对象(装箱),以及将对象转换为基本数据类型(拆箱)。这样就可以在需要对象的地方使用基本数据类型。

  2. 类型转换:包装类提供了一些方法来进行不同类型之间的转换。比如,可以使用Integer.parseInt()方法将字符串转换为整数,或者使用Double.valueOf()方法将字符串转换为浮点数。

  3. 数值相关的方法:包装类提供了一些数值相关的方法,如求绝对值、最大值、最小值等。比如,Math.abs()方法返回一个数的绝对值,Math.max()方法返回两个数中的最大值。

  4. 字符串转换:包装类还提供了一些方法来进行字符串和基本数据类型之间的转换。比如,可以使用Integer.toString()方法将整数转换为字符串,或者使用Double.parseDouble()方法将字符串转换为浮点数。

  5. 常量字段:包装类还定义了一些常量字段,如Integer.MAX_VALUE表示整数的最大值,Double.NaN表示一个非数字。

? ? ?通过这些功能,包装类可以方便地操作基本数据类型,并提供一些常用的数值计算和转换功能。





package integer;

public class IntegerDemo2 {
? ? public static void main(String[] args) {
? ? ? ? //1可以通过包装类获取其表示的基本类型的取值范围
? ? ? ? //获取int的最大值和最小值?
? ? ? ? int imax = Integer.MAX_VALUE;
? ? ? ? System.out.println(imax);
? ? ? ? int imin = Integer.MIN_VALUE;
? ? ? ? System.out.println(imin);

? ? ? ? long lmax = Long.MAX_VALUE;
? ? ? ? System.out.println(lmax);
? ? ? ? long lmin = Long.MIN_VALUE;
? ? ? ? System.out.println(lmin);

? ? ? ? /*
? ? ? ? ? ? 2字符串转换为基本类型的前提是该字符串正确描述了基本类型可以保存的值,否则
? ? ? ? ? ? 会抛出异常:NumberFormatException
? ? ? ? ?*/
? ? ? ? String str = "123";
// ? ? ? ?String str = "123.123";//这个字符串不能解析为int值!
? ? ? ? int d = Integer.parseInt(str);
? ? ? ? System.out.println(d);//123
? ? ? ? double dou = Double.parseDouble(str);
? ? ? ? System.out.println(dou);//123.123
? ? }
}

?

自动拆装箱特性

? ? JDK5之后推出了一个新的特性:自动拆装箱

? ?该特性是编译器认可的.当编译器编译源代码时发现有基本类型和引用类型相互赋值使用时会自动补充代码来完成他们的转换工作,这个过程称为自动拆装箱.


package integer;

public class IntegerDemo3 {
? ? public static void main(String[] args) {
? ? ? ? /*
? ? ? ? ? ? 触发自动拆箱特性,编译器会补充代码将包装类转换为基本类型,下面的代码会变为:
? ? ? ? ? ? int i = new Integer(123).intValue();
? ? ? ? ?*/
? ? ? ? int i = new Integer(123);
? ? ? ? /*
? ? ? ? ? ? 触发编译器自动装箱特性,代码会被编译器改为:
? ? ? ? ? ? Integer in = Integer.valueOf(123);
? ? ? ? ?*/
? ? ? ? Integer in = 123;
? ? }
}

总结? ? ?

? ? ?Java中的Object类是所有类的根类,即所有类都是Object类的子类。它定义了一些通用的方法,如equals()、hashCode()、toString()等,以及wait()、notify()、notifyAll()等用于线程同步的方法。

? ? ?包装类是一种用于封装基本数据类型的类,它们提供了一些操作基本类型数据的方法。Java提供了八种基本数据类型:byte、short、int、long、float、double、char和boolean,对应的包装类分别是:Byte、Short、Integer、Long、Float、Double、Character和Boolean

包装类的主要作用有以下几点:

  1. 可以将基本数据类型转换为对象类型,从而可以在集合类中使用基本数据类型。
  2. 可以为基本数据类型提供一些操作方法,如将字符串转换为基本数据类型,或者将基本数据类型转换为字符串。
  3. 可以实现一些特殊需求,如使用int类型的包装类Integer作为锁对象进行线程同步。

另外,包装类还提供了valueOf()方法和xxxValue()方法:

  1. valueOf()方法用于将基本数据类型转换为对应的包装类对象。
  2. xxxValue()方法用于将包装类对象转换为对应的基本数据类型。

? ? ?

文章来源:https://blog.csdn.net/Flying_Fish_roe/article/details/135633624
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。