String
String是对字符数组的封装 String中提供了很多方法帮助我们操作这个被封装的字符数组
一.创建String的两种方式
串池:用来放置字符串常量对象的区域 JDK1.7以前在方法区中 JDK1.7以后在堆空间中
1.String str = “字符串内容”;
以字符串常量形式创建字符串对象时 会在串池中创建一个String对象
2.通过构造方法创建: String str = new String(“字符串内容”);
以new的形式创建字符串对象时 会现在串池中创建一个String对象 再在堆空间中创建一个对象 并把堆中对象的地址给予引用
3.串池的特性
为了防止多次创建相同内容的字符串对象 相同内容的字符串对象只在串池中创建一次 内容相同引用都指向串池中同一对象
(常见面试题)
String两种创建对象的区别:
String str = “字符串内容” :只在串池中创建一个对象
通过构造方法创建: String str = new String(“字符串内容”); :需要在串池和堆中各创建一个对象
二.String的不可变性
字符串对象在串池中被创建后 对象就不可再被修改 如果对象内容被拼接则 先创建对象的副本再进行拼接从而生成新的对象
根据不同的场景 新对象所创建区域也不同
1.当使用对象名+“xxxx” 或直接使用对象与对象名相加时 这个拼接有对象名参与
生成的新对象存在于堆中
2.当拼接是以"xxx"+“xxx” 纯字符串常量相加时
生成的新对象存在于串池中
三.可变长字符串
1.StringBuffer
JDK1.0出现 线程安全 效率低
2.StringBuilder
JDK1.5出现 线程不安全 效率高
StringBuffer str1 = new StringBuffer("Hello");
StringBuffer str2 = str1;
str1.append("World");
System.out.println(str1==str2);//true
System.out.println(str1);//hw
System.out.println(str2);//hw
注意区分:
String两种创建的方法区别
String与StringBuffer或StringBuilder的区别
StringBuffer和StringBuilder的区别
掌握String中的十种以上常用API在项目实践中大有裨益:
字符串中的方法介绍
1、int length() 字符串长度
2、boolean equals(Object obj) 比较2个字符串的内容是否相同
3、char charAt(int index) 根据指定下标index,获取对应的1个字符
4、String substring(int beginIndex) 截取字符串
对比:replace();字符替换I
5、String intern() 获取字符串在串池中的地址
6、char[] toCharArray() 字符串转换成字符数组类型
7、boolean contains(String s) boolean b = s1.contains(s2); s2是否是s1子串
8、boolean isEmpty() 判断是否是空字符串("" 长度0),是空串返回true,否则false
9、String toLowerCase() 字符串转换成小写返回
10、String toUpperCase() 字符串转换成大写返回
11、String trim() 去掉字符串前后的空格
12、boolean endsWith(String suffix) s1.endsWith(s2) 判断s1是否以s2结尾
13、boolean startsWith(String prefix) 判断一个字符串是否以 prefix开头
14、int lastIndexOf(String str) 从后向前查询
15、int lastIndexOf(String str, int fromIndex) 从formIndex向前检索