Advertisement

Java重修笔记 第三十二天 String类

阅读量:
String类特性

1. 一个字符占两个字节,不管是英文还是中文

2. 字符串本质是由字符数组存储的一组数据 private final char value[];

双引号所定义的字符串对象,在内存层次上其引用直接指向底层常量池中的内存地址;当该地址不存在时,则会自动创建

由JavaScript新操作符new生成的字符串对象,在内存分配过程中会在堆内存中为该字符串对象预留一个存储空间,并将其引用与之绑定;其中包含一个名为value的数组属性,在该数组内部存放着与字符相关的数据;这个数组引用将指向底层常量池中的对应地址;若常量池中不存在对应的资源,则会自动生成相应的数据单元以满足需求

5. 当两个双引号引用的String对象进行相加操作时(例如,在代码中使用如String str = "abc" + "def";的情况下),编译器会将其优化为一个单独的字符串(例如 String str = "abcdef";)。因此,在方法区只会创建一个单独的对象。

当发生两个字符串常量进行连接操作时(即相加)的情况下,则会先生成一个空StringBuilder实例,并通过调用其append方法将两个字符串逐个添加进去。随后系统会自动调用String构造器将该StringBuilder转换为一个新的完整String对象。整个过程中总共会产生三个独立的对象:即初始的StringBuilder实例、存储在内存中的最终结果String对象以及该对象内部的字符数组指针指向的方法区标识符"abcdef"的对象

由于String类内部存储的是字符串常量,在每次进行字符串更新操作时都需要为新字符串预先分配空间(通过new StringBuild和new String对象),这使得大批量String字符串的拼接操作在性能上显得不够理想。不过,在实际应用中使用String类来进行配置文件的配置或表示固定常量值等方面仍然非常便捷

String类的常用方法

1. public boolean equals(Object anObject)

忽略大小写的区分情况下

2. public boolean equalsIgnoreCase(String anotherString)

不区分大小写,其余和equals方法相同

3. public int indexOf(String str, int fromIndex)

在字符串中从指定起始位置fromIndex开始搜索特定字符序列,并返回其首次出现的位置索引。如果未找到,则返回-1。

4. public int lastIndexOf(String str, int fromIndex)

在目标子串中被查询结果为末次出现的位置,并在截止位置fromIndex之前进行查找;如果未找到则返回-1

5. public String substring(int beginIndex)

返回指定索引beginIndex开始到结束的字符串

6. public String substring(int beginIndex, int endIndex)

返回指定索引beginIndex开始到endIndex - 1的字符串,左开右闭

7. public String toUpperCase()

将字符串转换为大写返回

8. public String toLowerCase()

将字符串转换为小写返回

9. public String concat(String str)

将字符串拼接在末尾后返回

10. public String replace(CharSequence target, CharSequence replacement)

将老字符串替换为新字符串后返回,但对源字符串对象不产生影响

11. public String[] split(String regex)

将字符串分割并返回

12. public char[] toCharArray()

将字符串转换为字符数组

13. public int compareTo(String anotherString)

比较两个给定的字符串S1和S2时,在以下情况下计算它们之间的差异:当S1等于S2时结果返回0;当两者的前缀完全相同时结果返回这两个字符串长度之差;当两者的前缀存在差异时结果返回这两个字符串在Unicode编码下的差异。

14. public static String format(String format, Object... args)

占位符%s表示字符串类型;占位符%d标识整数值;占位符%.2用于表示双精度浮点型数值,并且经过四舍五入处理至小数点后两位;占位符%c标识字符类型

全部评论 (0)

还没有任何评论哟~