栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

包装类[java]

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

包装类[java]

⛳️我们为什么要创建包装类?

️️️️ Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的,这在实际使用时存在很多的不便,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类,包装类就是将基本数据类型封装成一个类,让这个基本数据类型作为类的一个属性

包装类(如:Integer,Double等)这些类封装了一个相应的基本数据类型数值,并为其提供了一系列操作方法。

八种数据类型对应的包装类:

基本数据类型对应包装类包装类的父类
bytejava.lang.Bytejava.lang.Number
shortjava.lang.Shortjava.lang.Number
intjava.lang.Integerjava.lang.Number
longjava.lang.Longjava.lang.Number
floatjava.lang.Floatjava.lang.Number
doublejava.lang.Doublejava.lang.Number
booleanjava.lang.Booleanjava.lang.Object
charjava.lang.Characterjava.lang.Object

注意:

    java八种基本数据类型的字节数:分别为1、2、4、8个字节;1字节(byte、boolean)、 2字节(short、char)、4字节(int、float)、8字节(long、double);

    八种基本数据类型的包装类,除了char的是Character、int类型的是Integer,其他都是首字母大写;

    对应包装类的直接父类:前6个由于是数,直接父类为Number,而后两个的直接父类就是Object类;

对于包装类来说,这些类的用途主要包含两种:

● 作为和基本数据类型对应的类类型存在。

● 包含每种基本数据类型的相关属性如最大值、最小值等,以及相关的操作方法。

常用常量:

①SIZE:表述这个具体对象的value值的二进制表示形式下的位数

②BYTES:表示这个包装类对应基本类型的字节数(byte)

一个字节(byte)==八位(bit);

比如:Integer对应的基本数据类型就是int类型,一个int类型的对象占四个字节

③ MAX_VALUE: 表示 int 型可取的最大值

④ MIN_VALUE: 表示 int 型可取的最小值

案例:

System.out.println(Integer.MIN_VALUE);//int类型可取的最小值:-2147483648
System.out.println(Integer.MAX_VALUE);//int类型可取的最大值:2147483647
System.out.println(Integer.BYTES);//int类型的字节数:4
System.out.println(Integer.SIZE);//int类型的二进制位数:32
⛳️包装类常用属性方法

以下都以Integer为例 

1.构造方法

①Integer(int a);

以 int 型变量作为参数创建 Integer 对象,实例代码如下:

Integer a = new Integer(8);

②Integer(String a);

以 String 型变量作为参数创建 Integer 对象,实例代码如下:

Integer number=new Integer("8");
2.比较方法

①public static int compareTo(Integer anotherInteger );

在数字上比较两个 Integer 对象,如果这两个值相等,则返回 0;如果调用对象的 数值小于 anotherInteger 的数值,则返回负值;如果调用对象的数值大于anotherInteger 的数值,则返回正值

②public boolean equals(Object IntegerObj );

比较此对象与指定对象是否相等

③public int max(int a,int b);

返回a、b中数值大的

④public int min(int a,int b);

返回a、b中数值小的

3.转换方法

①public static toBinaryString(int i);

十进制转为二进制形式

②public static String toHexString(int i);

十进制转为十六进制形式

③public static String toOctalString(int i);

十进制转换为八进制

案例:

public class IntegerDemo1 {
    public static void main(String[] args) {
        //转2进制
        System.out.println(Integer.toBinaryString(3));//11
        //转16进制
        System.out.println(Integer.toHexString(17));//11
        //转8进制
        System.out.println(Integer.toOctalString(9));//11
    }
}

④public int intValue();

返回这个对象的value值

⑤public static int parseInt(String s);

将String类型的实参转换为int类型

注意:在转换时要保证这个String实参可以转换为int类型,如果这个字符串中包含有字母,那么就会出现转换异常

⑥public String toString();

返回一个表示该Integer 值的 String 对 象

⑦static Integer valueOf(int i);

将int类型的数值转换为Integer类型

⑧static Integer valueOf(String s);

将String类型的转换为Integer类型

案例:

public class IntegerDemo1 {
    public static void main(String[] args) {
       Integer i1 = new Integer(10);//基本类型包装到对象中
       int i2 = i1.intValue();//把对象中的基本类型取出来
​
       int i3 = Integer.parseInt("10");//将String类型转为int类型
       i1.toString();//将int包装类型转为String类型
​
       Integer i4 = Integer.valueOf(10);//将基本类型转为引用类型
       Integer i5 = Integer.valueOf(10);//将String类型转为引用类型
    }
}
⛳️自动装箱和自动拆箱 1.概念

简介:jdk1.5之后的新特性。该特性是编译器认可的,是在编译器自动将基本数据类型和包装类相互转换,节省了麻烦。

自动装箱:java编译器自动将基本数据类型转换为包装类,自动调用的是valueOf方法

自动拆箱:java编译器自动将包装类转换为基本数据类型,拆箱的时候自动调用的是xxxValue方法

案例:

public void IntegerDemo() {
        //自动装箱
        Integer a=12;//原理是Integer a = Integer.valueOf(12);
        //自动拆箱
        int b=a+1;//原理是int b = a.intValue()+1;
        
        Integer c=123;
        Integer d=123;
        Integer e=c+d;
        
}
2.valueOf()方法源码研究

按住ctrl键,鼠标点击该方法即可查看源码,下面以Integer类的valueOf(int i)为例

public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
}

理解:由于我们经常会将-128-127之间的数进行包装成类,所以我们就在Integer的内部定义了一个IntegerCache结构,IntegerCache中定义了Integer [] 数组在这个数组中保存了-128-127范围之间的整数,我们使用自动装箱的方式给Integer赋值时, Integer类的valueOf(int i)方法首先会判断i是否在-128~127之间,如果在的话,就返回的对象是Integer类中静态数组cache中的对象,如果不是在这之间,就会重写创建一个新的对象。

通过查看其它类该方法的源码之后,可以得到该表:

包装类valueOf(X i)返回对象原则
Byte

直接取,数组范围为(-128,127),且byte值的范围也是(-128,127)

Short

(-128,127)之间在数组中取,否则new
Integer(-128,127)之间在数组中取,否则new
Long(-128,127)之间在数组中取,否则new
Float直接new
Double直接new
Boolean直接返回,不new
Character(0,127)之间从数组中取,否则new
                  3.包装类比较
public class IntegerDemo {
      public static void main(String[] args) {
           Integer a1=127;
           Integer a2=127;
           int a3=127;
           Integer b1=128;
           Integer b2=128;
           int b3=128;
        System.out.println(a1==a2);//true
        System.out.println(a1==a3);//true
        System.out.println(b1==b2);//false
        System.out.println(b1==b3);//true   
}

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/786052.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号