Java 基础 —— 字符串常量池及字符串常用方法

mac2024-04-07  31

字符串常量池

作为最基础的引用数据类型,Java 设计者为 String 提供了字符串常量池以提高其性能

字符串常量池的设计思想 字符串的分配,和其他的对象分配一样,耗费高昂的时间与空间代价, 作为最基础的数据类型,大量频繁的创建字符串,极大程度地影响程序的性能 JVM为了提高性能和减少内存开销,在实例化字符串常量的时候进行了一些优化 为字符串开辟一个字符串常量池,类似于缓存区 创建字符串常量时,首先坚持字符串常量池是否存在该字符串 存在该字符串,返回引用实例,不存在,实例化该字符串并放入池中 实现的基础: 实现该优化的基础是因为字符串是不可变的,可以不用担心数据冲突进行共享 运行时实例创建的全局字符串常量池中有一个表,总是为池中每个唯一的字符串对象维护一个引用,这就意味着它们一直引用着字符串常量池中的对象,所以,在常量池中的这些字符串不会被垃圾收集器回收

String对象常用方法

package string; import java.util.Arrays; /** * 字符串的常用方法 * @author Administrator on 2019/10/31. * @version 1.0 */ public class StringDemo { public static void main(String[] args) { // 字符串是引用类型,一旦创建,内容不可改变,它的底层是一个背final修饰的byte[]数组,不能改变,是常量 // 下面这种写法,字符串的内容仍然是没有改变的 String lang = "PHP"; lang = "Java"; System.out.println(lang); // 改变的变量lang的地址值 // equals() 比较字符串 String str1 = "Hello"; String str2 = "hello"; System.out.println(str2.equals(str1)); // false // equalIgnoreCase() 不区分大小写比较字符串 System.out.println(str2.equalsIgnoreCase(str1)); // true // length() 计算字符串长度 System.out.println(str1.length()); // 5 // concat()字符串拼接,返回新字符串 System.out.println(str1.concat(" World")); // Hello World // 原字符串不改变 System.out.println(str1); // Hello // charAt 获取指定索引位置的单个字符 System.out.println(str1.charAt(2)); // l // indexOf 查找字符在字符串第一次出现的位置,不存在返回-1 System.out.println(str1.indexOf('l')); // 2 // substring(int beginIndex, int endIndex) 截取字符串,第二个参数不传的话,默认到结尾,返回新字符串 System.out.println(str1.substring(1)); // ello // replace() 替换字符串的内容,返回新字符串 String str3 = "What the Fuck ?!"; String str3New = str3.replace("Fuck","****"); System.out.println(str3New); // What the **** ?! // split() 按照参数的规则,分割字符串成一个数组 // 参数其实是一个正则表达式,如果按照英文"."句号切割时,要用"\\." String str4 = "aa,bb,cc"; String[] strArr = str4.split(","); System.out.println(Arrays.toString(strArr)); // [aa, bb, cc] String str5 = "aaa.bbb.ccc"; String[] str5Arr = str5.split("."); System.out.println(Arrays.toString(str5Arr)); // [] 切割失败,应该用 String[] str5Array = str5.split("\\."); System.out.println(Arrays.toString(str5Array)); // [aaa, bbb, ccc] //=================== // 转换相关: //=================== // toCharArray() 将字符串拆分成字符数组作为返回值 char[] chars = str1.toCharArray(); System.out.println(chars[0]); // H // getBytes() 获得单签字符串底层的字节数组 byte[] bytes = str1.getBytes(); System.out.println(bytes[0]); // 72 } }
最新回复(0)