一:概述
java中的String在java.lang包下,使用时可以直接使用不需要进行导包。字符串在日常使用中非常多,例如之前的变量定义。
二:详细说明
<1>JDK-帮助文档中对Strng类的介绍
<2>字符串常量的创建,字符串常量在创建之后,它们的值不能被更改,但是可以被共享。
public static void main(String[] args) {
String s1 = "abc12345324356";
int length = s1.length();
System.out.println(length);
s1 = "abc"; // 这一步是让s1这个字符串类型的变量,记录了一个新的对象
System.out.println(s1);
}
<3>String类的构造方法
- String类表示字符串。 Java程序中的所有字符串文字(例如"abc" )都实现为此类的实例
构造方法:
- String():初始化新创建的 String对象,使其表示空字符序列
- String(String original):初始化新创建的String对象,使其表示与参数相同的字符序列
(1)创建空的字符串
String s = new String();
(2)根据字符数组的内容,来创建字符串对象
char[] chs = {'a','b','c','d','f'};
String s2 = new String(chs);
(3)根据传入的字符串内容,来创建字符串对象
String s3 = new String("abc");
注意:java中,String类比较特殊,在打印的时候,打印的不是内存地址而是里面真实记录的内容。
<4>通过双引号创建字符串对象和构造方法创建字符串对象的区别
String s1 = "abcdef";
String s2 = "abcdef";
System.out.println(s1 == s2); //true
char[] chs = {'a', 'b', 'c'};
String s3 = new String(chs);
String s4 = new String(chs);
System.out.println(s3 == s4); // false
通过双引号创建字符串对象,它的存储地方是字符串常量池。构造方法创建的字符串对象它的存储地方是在堆内存中存储。
<5>字符串的比较与拼接
String s1 = "acded";
String s2 = "acded";
System.out.println(s1 == s2); // true
System.out.println("===================");
String s3 = "abc";
String s4 = new String("abc"); // 实际上创建了两个对象
System.out.println(s3 == s4); // false
System.out.println("=======================");
String s5 = "abc";
String s6 = "ab";
String s7 = s6 + "c";
System.out.println(s5 == s7); // false
System.out.println("====================");
String s8 = "qwef";
String s9 = "q" + "w" + "e" + "f";
System.out.println(s8 == s9); // true
// java在常量优化机制,在编译的时候,就会将“q”+"w"+"e"+"f"拼接为“qwef”
}
}
字符串常量池,当使用双引号创建字符串的时候,系统会先检查该字符串是否在字符串常量池中,如果有就复用,如果没有,就会去创建。