第一节 String 类
一、定义:
1、从概念上讲,java字符串就是Unicode字符序列。每个用双引号括起来的字符串都是String类的一个实例。
Java字符串由char序列组成,也就是说,String的最小单位是char类型的字符。字符数据类型是一个采用UTF-16的编码表示Unicode代码点的代码单元。
3、StringPool(字符串池):
在java的内存分配中,存在着一个方法区,这里有一个常量池,是存放那些常量等不变的值,StringPool即字符串池就是存在于这里,它是一个存放字符串的公共存储池。字符变量指向存储池中的相应位置。如果是通过复制一个字符串变量,原始的字符串和复制的字符串将共享这个相同的字符串。
二、特点:
1、String是一种特殊的数据类型,可创建对象。
2、通过String创建的对象分别可存在于字符串池(StringPool)和堆内存中
3、String是一个final的类型,即不可被继承修改,一经初始化就终生不可改变。(要改变也是改变的引用变量)
4、StringPool中的数据可共享,即两个引用变量可指向同一个字符串池中的字符串
5、Java中的任何对象都可写成字符串的形式。
注:字符串不可变的原因:
a. 可以想得出,每种固定的东西是不会改变的,1就是1,也就是说你若想改变,只得改变这个引用变量所指向的地址。
b. 编译器可以让字符串共享数据。所以不必改变字符串,直接改变变量即可。
c. java的开发者认为共享数据的效率要远远胜于提取、拼接字符串的效率。程序中对字符串的修改操作很少,更多的是对字符串进行比较。
(例外:将源自于文件或键盘的单个字符或较短的字符串汇集成字符串。具体在下面会说到。)
三、字符串方法:
String类适用于描述字符串事物,它提供了多个方法对字符串进行操作,下面给大家介绍几个比较常用的关于字符串的方法;如果还想了解更多关于字符串的方法,可以查看字符串API。
四、构造字符串
在这里以StringBuilder为例,在穿插着说一下StringBuffer。
1、概述:
上面也提到了:按键或者来自文件中的单词。采用字符串连接的方式达到此目的的效率是十分低的,每次连接字符串,都会构建一个新的String对象,既降低了效率,又占用大量的空间。通过使用StringBuilder类局可以避免这个问题。另外,在构建字符串时就调用toString方法,可以得到一个String对象。
StringBuilder作为一个容器,是被final修饰的,它是字符串缓冲区,可以对这个“容器”进行“CURD”操作,即存储(creat),修改(update),获取(read),删除(delete)。
这里需要说明的一点是:StringBuilder是在JDK1.5之后才出来的,相对于StringBuffer的效率要高。因为可以不用每次判断锁。虽然不安全,但是效率更高,建议开发使用StringBuilder。StringBuilder和StringBuffer的对比:
----StringBuilder:是线程不同步的,相对效率更高,但是不安全
----StringBuffer: 是线程同步的,相对效率较低,但安全。
2、构建格式:
StringBuilder bul = new StringBuilder();
3、特点:
第一、StringBuilder的长度是可变的,也可以通过length()的方法求当前对象的长度。
第二、可以直接操作多个数据类型。可将如int、double、char、boolean等类型的数据作为字符串相连接存入容器中。
第三、最终会通过toString方法变为字符串。
4、StringBuilder的操作方法:
第一节 包装类
一、概述:
1、有时候,需要将int这样的基本类型转换为对象,以便可以使用一些方法。所有的基本类型都有一个相对应的类。这些类就称之为包装类。
2、基本数据类型对应的包装类:
基本数据类型 引用数据类型(包装类)
byte Byte
short Short
int Integeter
long Long
float Float
double Double
boolean Boolean
char Character
二、常见操作:
再来个包装类的面试题(装箱与拆箱):
自动封箱:其中Integer x = 4;就是自动封箱的过程,即Integer x = new Integer(4);
自动拆箱:其中x+2就是进行了自动拆箱的过程,将x变为int类型,再和2进行加法运算,在拆箱的时候,要先进行 x.intValue()的判断,是否x为null,不可为null,否则编译失败
自动封箱:再将求的和进行封装,赋值给x