目前开看:String类的字符串,对其的截取,使用均只是“借用”,并不会对原字符串造成影响
1.字符串的不可变性,三个简单例子
public class StringDemo6 {
public static void main(String[] args) {
// String的不可变性
// String对象一旦被创建,则不能修改,是不可变的
// 所谓的修改其实是创建了新的对象,所指向的内存空间不变
String s1 = "imooc"; // 在常量池中生成一个"imooc"字符串,在栈中有一个s1引用指向这个字符串
s1 = "hello,"+s1; // 在常量池中生成了一个"hello,imooc"字符串,然后,s1改指向"hello,imooc"这个字符串了;
// 此时"imooc"这个字符串就没有任何引用指向它了,它就被废弃掉了
System.out.println(s1);
}
}
结果:
hello,imooc

public class StringDemo6 {
public static void main(String[] args) {
String s1 = "imooc"; // 在常量池中生成一个"imooc"字符串,在栈中有一个s1引用指向这个字符串
String s2 = "hello,"+s1;
System.out.println(s1);
System.out.println(s2);
}
}
结果:
imooc
hello,imooc

public class StringDemo6 {
public static void main(String[] args) {
String s3 = new String("hello,imooc"); // 在堆中开辟空间存储对象
System.out.println(s3.substring(0, 5)); // 将截取后的"hello"存在常量池中,以供输出
System.out.println(s3);
}
}
结果:
hello
hello,imooc

注:
(1)目前看来,这篇博客并没有什么内容;
(2)发现在使用String类处理字符串时,由于字符串的不可变性,会产生很多中间变量,而且也会产生很多在常量池中废弃的数据,而使用StringBuilder可以避免这种情况的发生;
博客介绍了String类字符串具有不可变性,对其截取、使用不影响原字符串。同时指出使用String类处理字符串时,因不可变性会产生中间变量和常量池废弃数据,而使用StringBuilder可避免该情况。
949

被折叠的 条评论
为什么被折叠?



