首页 > 其他分享 >包装类

包装类

时间:2024-08-05 15:49:28浏览次数:7  
标签:Java 包装 数据类型 对象 自动 Integer

包装类

什么是包装类

包装类就是将基本数据类型封装在类中

  • 自定义包装类

    将基本数据类型包装成一个类对象的本质就是使用Object进行接收处理。

  • Java提供包装类

    对象型(Object的直接子类):Boolean(boolean)、Character(char)

    数值型(Number的直接子类):Byte、Double、Short、Long、Integer(int)、Float.

包装类的特点

  • 封装性:将基本数据类型封装成对象,使得它们可以存储在集合中(如List、Set等),因为集合只能存储对象。
  • 提供方法:包装类提供了一系列的方法,用于操作封装的基本数据类型。例如,Integer类提供了parseInt(String s)方法,用于将字符串转换为整数。
  • 自动装箱和拆箱:从Java 5(也称为Java 1.5)开始,引入了自动装箱(Autoboxing)和自动拆箱(Unboxing)机制。这意味着在基本数据类型和对应的包装类之间进行赋值时,Java编译器会自动完成装箱和拆箱操作,无需程序员显式调用包装类的构造器或转换方法。
  • 缓存机制:对于某些包装类(如IntegerShortByteCharacterBoolean),Java在自动装箱时会使用缓存机制。对于Integer来说,当数值在-128到127之间时,Java会返回缓存中的对象,而不是创建新的对象。这可以提高性能并减少内存消耗。

基本数据类型和包装类

基本数据类型 包装类型
byte java.lang.Byte(父类为Number)
short java.lang.Short(父类为Number)
int java.lang.Integer(父类为Number)
long java.lang.Long(父类为Number)
float java.lang.Float(父类为Number)
double java.lang.Double(父类为Number)
boolean Java.lang.Boolean(父类为Object)
char java.lang.Character(父类为Object)
其中Number是一个抽象类,无法实例化对象。

包装类的共同点

  • 封装基本数据类型

    包装类将Java中的基本数据类型(如int、double、char等)封装为对象。这使得基本数据类型能够以对象的形式存在和操作,从而提供了更多的灵活性和功能。

    提供额外的方法

    包装类提供了一系列额外的方法,这些方法使得对基本数据类型的操作更加丰富和灵活。例如,Integer类提供了parseInt(String s)方法用于将字符串转换为整数,toString()方法用于将整数转换为字符串等。

  • 实现Comparable接口

    大多数包装类都实现了Comparable接口,这使得它们支持比较操作。通过实现compareTo(T other)方法,包装类对象可以与其他相同类型的对象进行比较,以确定它们的大小关系。

  • 重写Object类的方法所有包装类都重写了

    这些方法在包装类对象进行比较和哈希表存储时非常重要。

    ​ equals(Object obj)`:用于判断两个包装类对象是否相等。在包装类中,这个方法通常会比较对象内部封装的基本数据类型值,而不是对象的引用地址。

    ​ hashCode():返回一个对象的哈希码值,这个值在对象的哈希表存储中非常重要。对于包装类对象,hashCode()`方法通常会基于内部封装的基本数据类型值来计算哈希码。

  • 缓存机制

    对于某些包装类(如IntegerShortByteCharacterBoolean),Java在自动装箱时会使用缓存机制。这意味着对于特定范围内的值(如Integer的-128到127),Java会返回缓存中的对象,而不是创建新的对象。这有助于提高性能和减少内存消耗。

    提供了与String的转换方法

    包装类通常提供了将自身转换为String类型的方法(如toString()),以及将String类型解析为包装类对象的方法(如parseInt()parseDouble()等)。这使得包装类与字符串之间的转换变得非常方便。

  • 不可变性

    除了String类之外,包装类对象也是不可变的。一旦一个包装类对象被创建并初始化,其内部封装的基本数据类型值就不能被改变。这有助于保持数据的一致性和安全性。

  • 泛型适用性

    包装类可以作为泛型类型参数使用,而基本数据类型则不能。这使得包装类在泛型编程中更加灵活和强大

  • 缓存机制

    对于某些包装类(如IntegerShortByteCharacterBoolean),Java在自动装箱时会使用缓存机制。这意味着对于特定范围内的值(如Integer的-128到127),Java会返回缓存中的对象,而不是创建新的对象。这有助于提高性能和减少内存消耗。

  • 提供了与String的转换方法

    包装类通常提供了将自身转换为String类型的方法(如toString()),以及将String类型解析为包装类对象的方法(如parseInt()parseDouble()等)。这使得包装类与字符串之间的转换变得非常方便。

  • 不可变性

    除了String类之外,包装类对象也是不可变的。一旦一个包装类对象被创建并初始化,其内部封装的基本数据类型值就不能被改变。这有助于保持数据的一致性和安全性。

  • 泛型适用性

    包装类可以作为泛型类型参数使用,而基本数据类型则不能。这使得包装类在泛型编程中更加灵活和强大。

    自动装箱,自动拆箱

自动装箱

自动装箱是指将基本数据类型(如int、double等)的值自动转换为对应的包装类对象(如Integer、Double等)的过程。这个过程是在编译时由Java编译器自动完成的,而不需要程序员显式地调用包装类的构造器。

示例

int num = 10;  
Integer numWrapper = num; // 自动装箱

在上面的示例中,num是一个基本数据类型int的变量,而numWrapper是一个Integer类型的变量。将num赋值给numWrapper时,Java编译器会自动将num的值包装成一个Integer对象,并将其赋值给numWrapper

自动拆箱

自动拆箱是指将包装类对象自动转换为对应的基本数据类型值的过程。这个过程也是在编译时由Java编译器自动完成的,而不需要程序员显式地调用包装类的转换方法(如intValue()doubleValue()等)。

Integer numWrapper = 10; // 实际上是自动装箱  
int num = numWrapper; // 自动拆箱

在上面的示例中,numWrapper是一个Integer类型的变量,而num是一个基本数据类型int的变量。将numWrapper赋值给num时,Java编译器会自动将numWrapper对象拆箱,获取其内部封装的基本数据类型值,并将其赋值给num

标签:Java,包装,数据类型,对象,自动,Integer
From: https://www.cnblogs.com/luoyiwen123/p/18343380

相关文章

  • 包装类
    包装类一.什么是包装类包装类(WrapperClasses)在Java中是指将基本数据类型(如int、double、char等)封装成对象的类。这些类都是Java类库的一部分,它们为每种基本数据类型提供了一个对应的类,使得基本数据类型能够以对象的形式存在和操作。包装类不仅为基本数据类型提供了对象的封装,还......
  • 【Java】包装类型变量的形参传递,方法内修改后,方法外还是原值?
    背景前几天有个朋友写代码时,想把int变量作为形参传入方法中进行修改后,在方法外能够获取到修改后的变量进行下一步操作。类似这样:classTest{publicstaticvoidmain(String[]args){intx=1;add(x);System.out.println(x);}pub......
  • c++function bind包装器详解
    包装器function包装器function包装器也叫适配器,c++中的function本质是一个类模板,也是一个包装器,那么为什么需要包装器呢。template<classF,classT>TuseF(Ff,Tx){staticintcount=0;cout<<"count:"<<++count<<endl;cout<<"count:&q......
  • 【数据结构】包装类和泛型
     ......
  • 如何将输入暗淡从 fit 方法传递到 skorch 包装器?
    我正在尝试将PyTorch功能合并到scikit-learn环境中(特别是Pipelines和GridSearchCV),因此一直在研究skorch神经网络的标准文档示例看起来像importtorch.nn.functionalasFfromtorchimportnnfromskorchimportNeuralNetClassifierclassMyModule......
  • java包装类型缓存简单探究-Integer为例
    文章目录包装类型缓存自动装箱与valueOf感悟结语包装类型缓存包装类型缓存是什么本文以常用的Integer包装类为例做一个探索,感兴趣可以用类似方法查看其他包装类。我们都知道它会缓存-128到127之间的整数Integer对象。结论大伙都知道。那么我们今天就来探究一下底......
  • 如何判断一个函数是否被另一个特定函数包装?
    使用下面的代码:defwrap(x):defwrapped(y):returnx+yreturnwrappedf=wrap(1)是否可以看出f是一个被函数包裹的函数wrap?显示变量f,它是可见的:>>>f<functionwrap.<locals>.wrappedat0x10067cf40>但是有没有办法确定|||被......
  • 可包装对象
    std::function模板类是一个通用的可调用对象的包装器,用简单的、统一的方式处理可调用对象。#include<iostream>#include<functional>usingnamespacestd;voidshow(intage,conststring&message){ cout<<"age"<<age<<"message"<<......
  • cimport 包装 C 库的 cython 模块
    我有这种C/cython项目:project/├──src/│└──modules/│├──cython1.pyx│├──cython1.pxd│├──cython2.pyx│├──cython2.pxd│├──includes/││├──c1.h││├──c1.c│......
  • Java基础-基本类型和包装类型
    基本类型Java有八种基本类型intfloatdoublelongbooleancharshortbyte基本类型如果是局部变量,那它们的位置会在虚拟机栈种。如果是成员变量它们会存放在堆中。包装类型相对应的Java也有八种包装类型IntFloatDoubleLongBooleanCharShortByte区别1.默认值:......