String类:

1. String类又称作不可变字符序列.
2. String位于java.lang包中,Java程序默认导入java.lang包下的所有类.
3. Java字符串就是Unicode字符序列,例如字符串“Java”就是4个Unicode字符’J’、’a’、’v’、’a’组成的.
4. Java没有内置的字符串类型,而是在标准Java类库中提供了一个预定义的类String,每个用双引号括起来的
字符串都是String类的一个实例.

当"+"运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后再进行连接.

String类和常量池:

1. 全局字符串常量池(String Pool):

全局字符串常量池中存放的内容是在类加载完成后存到String Pool中的,在每个VM中只有一份,
存放的是字符串常量的引用值(在堆中生成字符串对象实例).

2. class文件常量池(Class Constant Pool):

class常量池是在编译的时候每个class都有的,在编译阶段,存放的是常量(文本字符串、final常量等)
和符号引用.

3. 运行时常量池(Runtime Constant Pool):

运行时常量池是在类加载完成之后,将每个class常量池中的符号引用值转存到运行时常量池中,也就是说,
每个class都有一个运行时常量池,类在解析之后,将符号引用替换成直接引用,与全局常量池中的引用值保持一致.

字符串相等的判断:

1. equals方法用来检测两个字符串内容是否相等.如果字符串s和t内容相等,则s.equals(t)返回true,
否则返回false.
2. 要测试两个字符串除了大小写区别外是否是相等的,需要使用equalsIgnoreCase方法.
3. 判断字符串是否相等不要使用"==".

忽略大小写的字符串比较:
"Hello".equalsIgnoreCase("hellO"); // true


例子:
public static void main(String[] args) {
String str1 = "abc"; // 存储到全局常量池中
String str2 = "abc"; // 存储到全局常量池中
String str3 = "abc" + "def"; // 字符串连接,返回新字符串
String str4 = new String("abc"); // 新创建一个实例对象
System.out.println(str3);
System.out.println(str1 == str2); // true
System.out.println(str4 == str1); // flase
System.out.println(str1.equals(str4)); // true,equals比较的是字符串的内容是否一致
}

String类常用的方法:

public class TestStringFunc {

public static void main(String[] args) {
String s1 = "HELLO world";
String s2 = "hello world";
System.out.println(s1.charAt(3)); // 返回索引为3的字符

System.out.println(s2.length()); // 字符串的长度

System.out.println(s1.equals(s2)); // 比较两个字符串是否相等
System.out.println(s1.equalsIgnoreCase(s2)); // 比较两个字符串(忽略大小写)

System.out.println(s1.indexOf("wor")); // 返回字符串在s1中第一次出现的索引
System.out.println(s1.indexOf("apple")); // 如果字符串不在s1中则返回-1

System.out.println(s1.lastIndexOf("l")); // 返回字符串在s1中最后一次出现的索引(即从后往前查第一个)

String s = s2.replace(' ', '*'); // 将字符串s2中的空格用*取代,并返回一个新字符串
System.out.println(s);

String s3 = "";
String s4 = "Who are you";
System.out.println(s4.startsWith("Who")); // 是否以Who开头
System.out.println(s4.endsWith("you")); // 是否以you结尾

s3 = s4.substring(4); // 截取字符串,从索引为4的位置开始截取到结尾
System.out.println(s3);
s3 = s4.substring(4, 7); // 截取字符串[4,7) 不包括7
System.out.println(s3);

s3 = s4.toLowerCase(); // 字符串转为小写
System.out.println(s3);
s3 = s4.toUpperCase(); // 字符串转大写
System.out.println(s3);

String s5 = " How are you ";
s3 = s5.trim(); // 去除字符串前后的空格
System.out.println(s3);
}
}