对java包装类的学习

目录

前言

一、包装类是什么,为什么要有包装类?

二、基本数据类型和包装类的转换

1.装箱和拆箱的概念

2.装箱 int→Integer

3.分析valueOf源码

 4.拆箱Integer→int

5.String类型

6.StringBuffer和StringBuilder


前言

对于java中包装类的理解

一、包装类是什么,为什么要有包装类?

1.java是一种面向对象的语言,而java中的基本数据类型却不是面向对象的,不具备"对象"这种特性,

也就是说基本数据类型没有属性和方法调用,因此java为每种数据类型对应的设计了包装类.

8554d27a1d994da9abf7d1ebfe359a84.png

  2.我们可以看到基本数据类型对应的包装类,这里的boolean和Character父类是Object,其余的六个父类是Number.

  3.包装类的特点

(1)所有包装类都是final类型,因此不能创建他们的子类.

(2)包装类是不可变类,创建对象后基本数据类型不能被改变

二、基本数据类型和包装类的转换

下面的例子以包装类Integer为例

1.装箱和拆箱的概念

装箱:所谓的装箱就是把基本数据类型 包装成 包装类对象。
拆箱:所谓的拆箱就是把包装类中包装的基本数据类型取出。

2.装箱 int→Integer

三种方式:
(1)integer的构造方法
(2)integer包装类内部的valueOf()方法
(3)自动装箱

(1)使用构造方法

6549f3924ca2439eaa6e3ccadbb02674.png

 这种方式已经过时,所以很少使用

(2)使用包装类的valueOf()方法

0b81b5520ffc424d8b60c42e824b2a4d.png

(3)使用自动装箱方法

 fc599b05de4140718af351a78771dfdc.png

 正常我们使用自动装箱方法,但还是要理解它的底层还是调用的valueOf()方法。

3.分析valueOf源码

2c07cd8414ba4643a07b42aff28944a5.png

 b5a86c7ce8e945fb8e0a048cf83e3308.png598ea21b07974eb8a374a64ced9c1e8d.png

 可以看出如果传入的数在-128到127之间就不创建新空间,否则就创建新的空间.

这里我们可以看一个面试题

 57e000d970104f44b039f5fffcab3ac9.png

 如果直接new那么堆区空间地址不同比较就是false,但是如果使用的数equals()方法的话就是true,因为这里重写了equals()方法,比较的就是内容了,从实例三,四可以看出范围对判断的影响考察的就是对valueOf源码的理解.

eb8391cbec134b938e3fcc6995af8ee6.png

注意如果对比中有基本数据类型和包装类对比那么就直接当做值的比较即可,因为对比的时候包装类先自动拆箱再和基本数据类型去对比.

 4.拆箱Integer→int

两种方式

(1)使用包装类中的intValue()方法。

(2)通过自动装箱的方法。

(1)使用包装类中的intValue()方法

ae0484b9c73a47bcb6a2b819d07d1f9b.png

(2)使用自动装箱方法

e1a78d1da40f4f21a20560a119e2f694.png

5.String类型

这里我们补充一下String类型和int类型之间的转换

int→String

1.字符串的拼接

2.String类的valueOf可以把任意类型的数据转换成String类型

3.包装类的toString()方法

 4430718c4b964ba7a9abaf012393a5ab.png

这里valueOf还是调用了包装类的toString()方法

 e7621bb270794e0a8b594c91d8be47c3.png

分析一下toString

2229a1ac8dd146eea040ec524f50a9c3.png

这里有个计算size的方法stringSize(int i),可以学习一下

f921c3e864c444aaae17d0aff35804af.png

String→int

1.使用包装类拆箱

2.使用包装类的parseInt()方法

c9d312dd4858463888cd29e59a0c5d4b.png

6.StringBuffer和StringBuilder

(1)StringBuffer

1.很多方法与String相同,但是StringBuffer是可变长度

2.StringBuffer是一个容器

StringBuffer可变长度的含义:

1.String保存的是字符串常量,地址指向的值不可更改,每次String类的更新

   实际上就是更新地址,这样做效率是很低的,底层是private final char value[];

2.StringBuffer保存的是字符串变量,里面的值可以更改,不用更新地址,效率较高

   底层是char[] value;

StringBuffer的构造器和扩容

无参,默认大小为16

含capacity参数,大小为指定的大小

传入字符串,大小为str.length()+1

 

 

 String和StringBuffer的相互转换

      1.String→StringBuffer

         使用StringBuffer的构造器///使用StringBuffer的append()方法

    

    2.StringBuffer→String

     使用StringBuffer的toString方法///使用String的构造方法

     

 

StringBuffer常用方法

   1.增 append(str)

   2.删 delete(start,end)

   3.改 replace(strat,end,str)

   4.查 indexOf(str)

   5.插 insert(index,str)

 

 运行结果:

 

(2)StringBuilder

   1.可变的字符序列,与StringBuffer兼容API,但不是线程安全的,用在字符串缓冲区被单个线程使用的时候,大多数实现比StringBuffer快。

   2.StringBuilder上主要操作append和insert方法,可以重载这些方法来接受任意类型的数据

 (3)总结三者. 

        效率我们可以使用System.currentTimeMillIs()测试



本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部