JAVA进阶(八)包装类、StringBuffer与StringBuilder
前言
学习了String类之后,大家感觉到吃力了吗?撸起袖子加油干,我们继续包装类的学习
范例
1.包装类概述
java是面向对象的语言,但并不是 “纯粹的面向对象",我们之前经常写的基本数据类型就不是对象。但是我们在实际应用中经常要将基本数据类型转化为对象,以便于操作。为了解决这个问题,java设计了如下八个包装类,对应八个基本数据类型:
Boolean,Byte,Short,Integer,Long,Float,Double,Character这八个代表其基本的数据类型boolean,byte,short,int,long,float,double,char
2.Integer类讲解(其他类基本用法一致,以Integer为例说明)
(1)常量值(主要是MAX_VALUE和MIN_VALUE的值)
(2)构造方法(主要有以下两种构造方法)
(3)常用方法
- public static Integer valueOf(int i):通过一个基本数据类型int构造一个包装类Integer对象,推荐该方法而不是构造方法。
注意:该方法将缓存储存过的-128~127之间的整数值,如创建多个值相同Integer对象,那么它们的变量引用将指向一处,提升性能
- public int intValue():将包装类对象转化为基本数据类型int
(4)自动装箱和拆箱
jdk1.5之后,为了解决基本数据类型与包装类的转换问题,提供了自动装箱和拆箱的功能。实际上这是编译器自动的帮你调用了相应的ValueOf(int a)方法以及intValue()方法进行了装箱和拆箱,例如:
Integer a = 3;//自动装箱
int b = a;//自动拆箱
3.探究String类是不可变字符串
有的人可能会有疑惑?之前说String是不可变字符序列,那么如下程序你怎么解释?
其实,原理是这样的。str指向了方法区的字符串常量“aaa”,当执行了str = "bbb"时,方法区创建了字符串常量“bbb”,且str的引用指向“bbb”的内存地址。换句话说,我们创建了新对象“bbb”,没有改变“aaa”!!!
通过源码分析一样可以得出结论(String类的值已被final关键字修饰,一旦赋初始值将不能被改变):
4.StringBuffer与StringBuilder类
同String类为不可变字符序列不同的是,StringBuffer和StringBuilder类是可变的。通过源码分析一样可以得出结论:
探究如下程序的运行结果,请运用内存分析合理解释为什么?
StringBuffer与StringBuilder的区别:
- StringBuffer线程安全,效率低
- StringBuilder线程不安全,效率高(在不涉及线程安全的情况下,优先使用该类)
5.这里以StringBuilder为例,介绍其常用方法
- public StringBuilder append(String str):用来进行字符串的拼接,类似于String的concat()以及字符串连接符“+”