一、概述
String类位于java.lang包下,是Java语言的核心类,提供了字符串的比较、查找、截取、大小写转换等操作;
Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现;
字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。
二、创建string字符串
创建string有两种方式String str1 = "hello"
和 String str2 = new String("hello")
public static void test1() {
String str1 = "hello";
String str2 = new String("hello");
String str3 = new String(str1);
String str4 = "hel" + "lo";
System.out.println(str1 == str2); //false
System.out.println(str1 == str3); //false
System.out.println(str2 == str3); //false
System.out.println(str1 == str4); //true
String strA = "hello";
String strB = "he";
String strC = strB + "llo";
System.out.println(strA == strC); //false;
String s1 = "AB";
String s2 = "AB";
String s3 = new String("AB");
System.out.println(s1 == s2);
System.out.println(s1 == s3);
}
- 两种方式的比较
- 直接赋值
String str1 = "hello"
:只开辟一块堆内存空间,并且会自动入池,不会产生垃圾。 - 使用
String str2 = new String("hello")
,会重新开辟一个内存空间,并且其中的字符串不会进入常量池;
- 注意:
new String("hello").intern()
的intern 方法是一个native方法,intern方法会从字符串常量池中查询当前字符串是否存在,如果存在,就直接返回当前字符串;如果不存在就会将当前字符串放入常量池中,之后再返回。
三、string的常用api
1.根据字符获取位置
public static void test2() {
String str = "abcdefg";
str.indexOf('a'); //返回的是ch在字符串中第一次出现的位置。
str.indexOf('a', 1); //从fromIndex指定位置开始,获取ch在字符串中出现的位置。
str.indexOf("gb"); //返回的是str在字符串中第一次出现的位置。
str.indexOf("gb", 1); //从fromIndex指定位置开始,获取str在字符串中出现的位置。
str.lastIndexOf('g'); //获取最后一个
}
2.字符串中是否包含某一个子串
- 内部也是使用
public int indexOf(String str, int fromIndex)
方法判断的
String str = "abcdefg";
str.contains("11");
3.字符串开头和结尾
str.startsWith("1");
str.endsWith("1");
4.判断内容是否相同
str.equalsIgnoreCase("abcdefg"); //比较内容,忽略大小写
str.equals("1");
5.字符转换
String[] split = "abcde,abce".split(","); //字符串切割
https://www.jianshu.com/p/6c65c25c258b
https://blog.csdn.net/ifwinds/article/details/80849184