系列文章目录
前言
Sting类是常量字符串的包装类。
一、String类
1.1 String 类的理解和创建对象
| String 类 |
|---|
| String对象用于保存字符串,也就是一组字符序列 |
| 字符串常量对象使用双引号括起的字符序列 |
| 字符串的字符使用Unicode字符编码,一个字符不区分字母还是汉字占两个字节 |
 |
public class String01 {
public static void main(String[] args) {
String name = "jack";
name = "tom";
final char[] value = {'a','b','c'};
char[] v2 = {'t','o','m'};
value[0] = 'H';
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
1.2 创建 String 对象的两种方式
| 创建 String 对象的方式 |
|---|
| 方式一:直接赋值 String s = “jack”; |
| 方式二:调用构造器 String s = new String(“jack”); |
1.3 两种创建 String 对象的区别
| 方式一 |
|---|
| 先从常量池看是否有"jack"数据空间。如果有则直接指向,如果没有则重新创建,然后指向 |
| 最终s指向的是常量池的空间地址 |
| 方式二 |
|---|
| 先在对中创建空间,里面维护了value属性,指向常量池的"jack"空间。如果常量池中没有“jack”,则重新创建;如果有则直接通过value指向 |
| 最终s指向的是堆中的空间地址 |
 |
String a = "abc";
String b = "abc";
System.out.println(a.equals(b));
System.out.println(a == b);
String a = new String("abc");
String b = new String("abc");
System.out.println(a.equals(b));
System.out.println(a == b);
String a = "abc";
String b = new String("abc");
System.out.println(a.equals(b));
System.out.println(a == b);
System.out.println(a == b.intern());
System.out.println(b == b.intern());
Person p1 = new Person();
p1.name = "jack";
Person p2 = new Person();
p2.name = "jack";
System.out.println(p1.name.equals(p2.name));
System.out.println(p1.name == p2.name);
System.out.prinltn(p1.name == "jack");
String s1 = new String("jack");
String s2 = new String("jack");
System.out.println(s1==s2);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
二、字符串的特性
| 字符串的特性 |
|---|
| String是一个final类,代表不可变的字符序列 |
| 字符串是不可变的。一个字符串对象一旦被分配,其内容是不可变的 |
String s1 = "hello";
s1 = "hahaha";
String a = "hello" + "world";
String a = "hello";
String b = "world";
String c = a+ b;
String d = new String("helloworld");
System.out.println(c == d);
String s1 = "hello";
String s2 = "world";
String s3 = "helloworld";
String s4 = (s1 + s2).intern();
System.out.println(s3 == s4);
System.out.println(s3.euqals(s4));
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
public class Test1
{
String str = new String("jack");
final char[] ch = {'j','a','v','a'};
public void change(String str, char ch[])
{
str = "java";
ch[0] = 'h';
}
public static void main(String[] args)
{
Test1 ex = new Test();
ex.change(ex.str, ex.ch);
System.out.print(ex.str + "and");
System.out.println(ex.ch);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21

三、String 类的常见方法
String类是保存字符串常量的。每次更新都需要重新开辟空间,效率较低,因此java设计者还提供了StringBuilder 和 StringBuffer 来增强 String 的功能,并提高效率。
| String类的常见方法part1 | 作用 |
|---|
| equals | 区分大小写,判断内容是否相等 |
| equalslgnoreCase | 忽略大小写的判断内容是否相等 |
| length | 获取字符的个数,字符串的长度 |
| indexOf | 获取字符在字符串中第一次出现的索引,索引从0开始找不到返回-1 |
| lastIndexOf | 获取字符在字符串中最后一次出现的索引,索引从0开始找不到返回-1 |
| substring | 截取指定范围的子串 |
| trim | 去掉前后空格 |
| charAt | 获取某索引处的字符,注意不能使用Str[index]这种方式 |
public class StringMethod01 {
public static void main(String[] args) {
String str1 = "hello";
String str2 = "Hello";
System.out.println(str1.equals(str2));
String username = "johN";
if ("john".equalsIgnoreCase(username)) {
System.out.println("Success!");
} else {
System.out.println("Failure!");
}
System.out.println("韩顺平".length());
String s1 = "wer@terwe@g";
int index = s1.indexOf('@');
System.out.println(index);
System.out.println("weIndex=" + s1.indexOf("we"));
s1 = "wer@terwe@g@";
index = s1.lastIndexOf('@');
System.out.println(index);
System.out.println("ter 的位置=" + s1.lastIndexOf("ter"));
String name = "hello,张三";
System.out.println(name.substring(6));
System.out.println(name.substring(2,5));
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
| String类的常见方法part2 | 作用 |
|---|
| toUpperCase | 转换成大写 |
| toLowerCase | 转换成小写 |
| concat | 拼接字符串 |
| replace | 替换字符串中的字符 |
| split | 分割字符串对于某些分割字符我们需要转义 |
| compareTo | 比较两个字符串的大小 |
| toCharArray | 转换成字符数组 |
| format | 格式字符串,%s字符串 %c字符 %d整型 %.2f浮点型 |
public class StringMethod02 {
public static void main(String[] args) {
String s = "heLLo";
System.out.println(s.toUpperCase());
System.out.println(s.toLowerCase());
String s1 = "宝玉";
s1 = s1.concat("林黛玉").concat("薛宝钗").concat("together");
System.out.println(s1);
s1 = "宝玉 and 林黛玉 林黛玉 林黛玉";
String s11 = s1.replace("宝玉", "jack");
System.out.println(s1);
System.out.println(s11);
String poem = "锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆辛苦";
String[] split = poem.split(",");
poem = "E:\\aaa\\bbb";
split = poem.split("\\\\");
System.out.println("==分割后内容===");
for (int i = 0; i < split.length; i++) {
System.out.println(split[i]);
}
s = "happy";
char[] chs = s.toCharArray();
for (int i = 0; i < chs.length; i++) {
System.out.println(chs[i]);
}
String a = "jcck";
String b = "jack";
System.out.println(a.compareTo(b));
String name = "john";
int age = 10;
double score = 56.857;
char gender = '男';
String info ="我的姓名是" + name + "年龄是" + age + ",成绩是" + score + "性别是" + gender + "。 希望大家喜欢我!";
System.out.println(info);
String formatStr = "我的姓名是%s 年龄是%d, 成绩是%.2f 性别是%c.希望大家喜欢我! ";
String info2 = String.format(formatStr, name, age, score, gender);
System.out.println("info2=" + info2);
}
}

- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
总结
String类可以完成字符串数据的处理。