Java基础-学习笔记13
13 常用类
包装类
针对八种基本数据类型相应的引用类型——包装类。有了类的特点,就可以调用类中的方法。
包装类和基本数据的转换
1)jdk5前的手动装箱和拆箱方式。装箱:基本类型-> 包装类型;拆箱:包装类型->基本类型
2)jdk5及之后的自动装箱和拆箱方式
3)自动装箱底层调用的是 valueOf方法,比如 Integer.valueOf(),拆箱底层调用 Integer.intValue(),其他包装类类似
包装类和 String 类型的转换
Integer i = 100; // 自动装箱
// 方式1
String str1 = i + ""; //这种方式i本质没有变,是与""生成了一个新对象后赋给str1
// 方式2
Srting str2 = i.toString();
// 方式3
String str3 = String.valueOf(i);
String str4 = "12345";
Integer i1 = Integer.parseInt(str4); // 右边返回int类型后进行自动装箱
Integer i3 = new Integer(str4); // 通过构造器创建
更多方法自行查看对应包的方法。
String 类
String 对象用于保存字符串。字符串常量对象是用双引号括起的字符序列。
字符串的字符使用 Unicode 字符编码,一个字符占两个字节。
String 类较常用的构造器:
String 是 final 类,不能被继承。String有属性 private final char value[];用于存放字符串内容。该 value 是 final 类型,不可修改(不是里面存放的字符不可修改,而是值value指向的地址不可修改)
String可以串行化:可以在网络传输
StringBuffer 类
代表可变的字符序列,可以对字符串内容进行增删。
很多方法与 String 相同,但 StringBuffer 是可变长度的。
StringBuffer 是一个容器,final类,不能被继承。
在 StringBuffer 的父类 AbstractStringBuilder 中有属性 char[] value,不是final。该 value 数组存放字符串内容,因此存放在堆中、不再是常量池。
String VS StringBuffer
1)String保存的是字符串常量,里面的值不能更改,每次 String 类的更新实际上是更改地址,效率更低。 // private final char value[];
2) StringBuffer 保存的是字符串变量,里面的值可以更改,每次 StringBuffer的更新实际上可以更新内容,不用每次更新地址,效率较高。 // char[] value; 这个放在堆。(只有value指向的内存空间不够时,才扩展空间,然后更改地址)
String 和 StringBuffer 相互转换
StringBuffer类常见方法
StringBuilder类
1)一个可变的字符序列。此类提供一个与 StringBuffer 兼容的API,但不保证替补(StringBuild 不是线程安全)。此类被设计用作 StringBuffer 的一个简易替换, 用在字符串缓冲区被单个线程使用的时候。如果可能,简易优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。
2)在 StringBuilder 上的主要操作是 append 和insert 方法,可重载这些方法,以接收任意类型的数据。
3)StringBuilder 和 StringBuffer 的方法基本一样,继承的类、实现的接口也一样。不过,StringBuilder 的方法,没有做互斥的处理,即没有 synchronized 关键字。因此最好在没有并发的情况下使用。
String、StringBuffer 和 StringBuilder的选择
- 如果字符串存在大量的修改操作,一般使用 StringBuffer 或 StringBuilder;
单线程情况:StringBuilder
多线程情况:StringBuffer - 如果字符穿很少修改,被多个对象引用,使用 String,比如配置信息等。