1.String的注意点:
1)String是Java定义好的一个类。定义在java.lang包中,所以使用的时候不需要导包。
2)Java程序中所有字符串文字,都被视为String这个类的对象。
3)字符串的内容是不会发生改变的,它的对象在创建后不能被更改。
4)字符串拼接产生一个新的字符串。
2.创建String对象的2种方式
1)直接赋值 String name = “ABC”;(尽量使用这种。代码简单且节约内存。)
2)new
public String() 创建空白字符串,不含任何内容
public String(String original) 根据传入的字符串,创建字符串对象
public String( char[] chs) 根据字符数组,创建字符串对象
public String( byte[] ch s) 根据字节 数组,创建字符串对象
3)代码
public class StringDemo {
public static void main(String[] args) {
//1.使用直接赋值的方式获取一个字符串对象
//★使用最多
String s1 = "abc";
System.out.println(s1);//abc
//2.使用new的方式来获取一个字符串对象
//空参构造:可以获取一个空白的字符串对象
//◆用得较少
String s2 = new String();
System.out.println("@" + s2 + "!");//@!
//3.传递一个字符串,根据传递的字符串内容再创建一个新的字符串对象
//◆这个方式只要了解即可,用得较少
String s3 = new String("abc");
System.out.println(s3);//abc
//4.传递一个字符数组,根据字符数组的内容再创建一个新的字符串对象
//应用场景:修改字符串的内容(数组可以改变)
//★使用多
char[] chs = {'a', 'b', 'c', 'd'};
String s4 = new String(chs);
System.out.println(s4);//abcd
//5.传递一个字节数组,根据字节数组的内容再创建一个新的字符串对象
//应用场景:网络中传输的数据为字节信息
//将字节信息转换成字符串。ASCII表。
//★使用多
byte[] bytes = {97, 98, 99, 100};
String s5 = new String(bytes);
System.out.println(s5);//abcd
}
}
3.JVM的内存模型
1)栈内存:方法运行的时候进栈,执行完毕出栈。
2)堆内存:new出来的对象。
3)方法区:临时存储字节码文件。
4.StringTable(串池/字符串常量池)
1)注意:从JDK7版本开始,串池从方法区移到堆内存。
但不管它在哪里,运行机制不变。
2)当使用双引号直接赋值时,系统会检查该字符串在串池中是否存在。
不存在:创建新的。存在:复用。