目录
- Java 中的字符串
- 字符串的创建
- 字符串的比较
- 字符串的拼接
- 如何定义一个空的字符串
Java 中的字符串
字符串的创建
在 Java 中,可以通过以下几种方式创建字符串:
1.使用字符串字面量:
String str = "Hello, World!";
2.使用 new
关键字和构造函数:
String str = new String("Hello, World!");
3.使用 StringBuilder
或 StringBuffer
类的 toString()
方法:
StringBuilder sb = new StringBuilder("Hello, World!");
String str = sb.toString();
字符串的比较
在 Java 中,比较字符串时需要注意以下几点:
-
使用
==
运算符比较字符串时,比较的是字符串的引用,而不是字符串的值。public class Client { public static void main(String[] args) { String a = "123"; //创建字符串 String b = "123"; System.out.println(a == b); } }
原因:相同字符串的地址共用
图解:
new关键字是在堆内存中开辟内存空间
== 对基本数据类型来说进行的是值的判断,对引用数据类型来说比较的是地址是否相等
public class Client { public static void main(String[] args) { String a = "123"; //创建字符串 String b = "123"; String c = new String(original: "123"); //new关键字是在堆内存中开辟内存空间 System.out.println(a == b); System.out.println(a == c); System.out.println(b == c); //== 对基本数据类型来说进行的是值的判断,对引用数据类型来说比较的是地址是否相等 } }
对基本数据类型来说 进行的是值的判断,基本数据类型只能用判断,没有equals()这个方法
对引用数据类型来说 ==比较的是地址是否相等,equals()方法首先比较的是地址是否相等,如果相等返回true,如果不相等,比较的是值是否相等
-
使用
equals()
方法比较字符串时,比较的是字符串的值。 -
如果需要比较字符串的大小,可以使用
compareTo()
方法。
字符串的拼接
在 Java 中,可以使用 +
运算符或 concat()
方法来拼接字符串。
1.使用 +
运算符:
+这里会调用append()方法进行拼接,利用toString()方法生成new,toString()方法里有new关键字;new关键字是在堆内存中开辟内存空间
String str1 = "Hello";
String str2 = "World";
String str3 = str1 + ", " + str2 + "!";
public static void main(String[] args) {
//字符串的拼接
String s1 = "123";
String s2 = "456";
String s3 = s1 + s2;
String s4 = "123456";
System.out.println(s3 == s4);
}
原因:s3这里:调用了append()方法,进行了字符串拼接,形成了123456
执行顺序:
@Override
public synchronized String toString() {
if (toStringCache == null) {
toStringCache = Arrays.copyOfRange(value, from: 0, count);
}
return new String(toStringCache, share: true);
}
并且这里返回的是new,new关键字是在堆内存中开辟内存空间,
所以是flase
例题1:
例题2:
String s1 = "123" + "456"; //编译是编译成123456
String s2 = "123456"; //编译是编译成123456
System.out.println(s1);
System.out.println(s1 == s2); //所以是true
图解:
2.使用 concat()
方法:
String str1 = "Hello";
String str2 = "World";
String str3 = str1.concat(", " + str2 + "!");
如何定义一个空的字符串
字符串定义空的两种方法:
String 张三=" ";//在栈,堆内存中有指向,但是没有数据
String 李四=null;//没有指向(指向是空)
String 王五;//不能使用,必须要初始化