1. String类的两种实例化方式
- 直接赋值:
String str = "Hello World" - 构造方法:
String str = new String("Hello World")
2. 常见面试题:请解释String类的两种对象实例化方式的区别
直接赋值:只会开辟一块堆空间,并且会自动保存在对象池中以供下次重复使用。
构造方法:会开辟两块堆内存空间,其中有一块空间将成为垃圾,并且不会自动入池,但用户可以使用intern()方法手工入池。
在开发中,永远采用直接赋值的方式实例化String对象。
3. 字符串的比较1
在实际的开发中,所有字符串的比较都不用"=="去比较,均使用 equals() 完成。
String str1 = "hello";
String str2 = new String("hello");
System.out.println(str1.equals(str2));
// >> true
4. 字符串一旦定义则不可改变
直接修改String会产生垃圾,因为直接修改将开辟新的堆内存,并修改引用关系。
如果想要修改,使用StringBuffer和StringBuilder代替。开发中,少量修改也可以,没必要关注产生的垃圾问题。
5. String类的常用方法
5.1 字符与字符串
String str = "hello";
char c = str.charAt(0); // charAt:返回指定索引对应的字符信息
char data[] = str.toCharArray(); // toCharArray:将字符串以字符数组的形式返回
5.2 字节与字符串
String str = "hello";
byte[] data = str.getBytes(); // getBytes: 将字符串变为字节数组
5.3 字符串的比较2
String str1 = "Hello";
String str2 = "HEllo";
System.out.println(str1.equals(str2));
System.out.println(str1.equalsIgnore(str2)); // 忽略大小写
System.out.println(str1.compareTo(str2));
// compareTo()方法返回int类型,大于(返回结果大于0),小于(返回结果小于0),等于(返回结果等于0)
字符串的查找
- contains(String str) 判断指定的内容是否存在
- indexOf(String str) 从前向后查找指定字符串的位置,找不到返回-1
- lastIndexOf(String str) 从后向前查找指定字符串的位置,找不到返回-1
- startsWith(String prefix) 判断是否以指定的字符串开头
字符串的替换
- replaceAll(String regex, String replacement) 用新的内容代替旧的内容
- replaceFirst(String regex, String replacement) 替换首个满足条件的内容
字符串的截取
substring(int begin, int end);
字符串的拆分
split(String regex);
其他方法
- concat(String str); 字符串拼接
- trim() 去掉字符串中左右两边的空格,中间空格保留
- length() 长度
- isEmpty() 判空""