String类
实例化方式
String类是
引用数据类型
,该类实例化方式有两种:直接赋值
构造方法实现其实例化
public class Str {
public static void main(String[] args) {
//直接赋值
String str1 = "abc";
System.out.println(str1);//输出abc
//构造方法实现实例化——将字符数组中的元素变为一个字符串
char[] data = {'a','b','c'};
String str = new String(data);
System.out.println(str);//输出abc
}
实例化方式区别
- 直接赋值,这种方式会出现常量池数据共享的现象:
public class Str {
public static void main(String[] args) {
String str1 = "abc";
//执行“String str1 = ”abc“;”后,JVM在常量池中开辟空间存放一个abc字符串空间并让str1指向该对象;
System.out.println(str);//输出abc
}
----------
public class Str {
public static void main(String[] args) {
String str1 = "abc";
String str2 = "abc";
String str3= "def";
System.out.println(str1);//输出abc
System.out.println(str2);//输出abc
System.out.println(str3);
}
//分析:
1、执行“String str1 = ”abc“;”后,
JVM在常量池中开辟空间存放一个abc字符串空间并让str1指向该对象;
2、执行“String str2 = ”abc“;”时,
JVM会先检查常量池中是否已经存在了一内容为abc的空间,
上面的代码等同于下面代码:
String str1 = "abc";
String str2 = str1 ;
3、执行“String str3 = ”def“;”时,
JVM会先检查常量池中是否已经存在了一个内容为def的空间,
由于不存在,所以JVM在常量池中新开辟一个空间存放def并让str3指向该空间;
- 构造方法实现其实例化,这种方式每new一次就会创建新的对象:
public class Str {
public static void main(String[] args) {
String str = "abc";
String str1 = new String(str);
String str2 = new String(str);
System.out.println(str1);
System.out.println(str2);
}
//分析:
1、执行“String str = ”abc“;”后,
JVM在常量池中开辟存放abc的空间并让str指向该空间;
2、执行“String str1 = new String(str);”时,
JVM直接创建一个【新的对象】并让str1指向该对象;
3、执行“String str2 = new String(str);”时,
JVM再次创建一个【新的对象】并让str2指向该对象;
常用方法
- length() 该方法返回字符串的长度:
public class StringTest {
public static void main(String[] args) {
String str = "Timmy Xu";
int length = str.length();
System.out.println(length);//输出8,包括空格
}
}
- startsWith(String value) 判断字符串是否以value字符串开头,如果是返回true,否则返回false:
public class StringTest {
public static void main(String[] args) {
String str = "Timmy Xu";
System.out.println(str.startsWith("Timmy"));//输出true
System.out.println(str.startsWith("timmy"));//输出false
}
}
- endsWith(String value) 判断字符串是否以value字符串结尾,如果是返回true,否则返回false:
public class StringTest {
public static void main(String[] args) {
String str = "Timmy Xu";
System.out.println(str.endsWith("Xu"));//输出true
System.out.println(str.endsWith("xu"));//输出false
}
}
- equalsIgnoreCase (String value) 用于判断两个字符串忽略大小写后是否相同,相同返回true,否则返回false。
- equals(String targetString) 用于判断两个字符串是否相同,完全相同返回true,否则返回false:
public class StringTest {
public static void main(String[] args) {
String str1 = "Timmy Xu";
String str2 = "Timmy Xu";
String str3 = "Xu Timmy";
String str4 = "timmy xu";
boolean result1 = str1.equals(str2);
System.out.println(result1);//输出true
boolean result2 = str1.equals(str3);
System.out.println(result2);//输出false
boolean result3 = str1.equals(str4);
System.out.println(result3);//输出false
boolean result4 = str1.equalsIgnoreCase(str4);
System.out.println(result4);//输出true
}
}
String 类equals方法和==区别:
String类中的
equals方法
用于判断两个字符串内容
是否相同:如果所比较的两个变量是
引用类型
,则==
用于比对两个变量指向的是否为同一个存放数据的地址
;- 如果是
基本数据类型
的两个变量进行比较,则比较的是值
是否相等:
public class StringTest {
public static void main(String[] args) {
String str1 = "Timmy Xu";
String str2 = "Timmy Xu";
String str3 = new String(str1);
boolean result1 = str1==str2;
System.out.println(result1);//输出true
boolean result2 = str1==str3;
System.out.println(result2);//输出false
}
}
- toCharArray() 将字符串转换为char类型的
数组
:
public class StringTest {
public static void main(String[] args) {
String str = "ABCDEFG";
char[] array = str.toCharArray();
for(char data:array) {
System.out.print(data+"+");//输出A+B+C+D+E+F+G+
}
}
}
public class StringTest {
public static void main(String[] args) {
String str = "ABCDEFGBSFVGBFJK";
String s1 = str.replace("ABC","XWZ");
System.out.println(s1);
//用"XWZ"代替"ABC",输出XWZDEFGBSFVGBFJK
String[] array = str.split("B");
for(int i=0;i<array.length;i++) {
System.out.println(array[i]);
}
//输出三个以B字符分割的数组:A CDEFG SFVG
String str1 = " fy tz ";
str1 = str1.trim();
System.out.println(str1);
//输出 "fy tz"
str1 = str1.replaceAll(" ", "");
System.out.println(str1);
//输出 "fytz"
}
}
public class StringTest {
public static void main(String[] args) {
String str = "ABCBCB";
System.out.println(str.lastIndexOf("CB", 3));//输出2
System.out.println(str.lastIndexOf("CB", 4));//输出4
}
}
Java API文档
StringBuffer类
- StringBuffer类也可以存放字符串,和String类不同的是,StringBuffer
字符串代表的是可变的字符序列,可以对字符串对象内容进行修改。