jdk中StringBuilder字符串调优和intern();方法

大家好,我是Ziph!

String

  • 字符串是常量,创建之后不可改变
  • 字符串字面值存储在字符串池中,可以共享
  • String s = “Hello”; 产生一个对象,字符串池中存储
  • String s = new String(“Hello”); //产生两个对象,堆、池中各存储一个
  • String类常用方法集合代码实例:点击String类方法集合

可变字符串

  • StringBuffer:可变长字符串,JDK1.0提供,运行效率慢,线程安全
  • StringBuilder:可变长字符串,JDK5.0提供,运行效率快,线程不安全
  • 注意:jdk中Stringbuffer和Stringbuilder的所有功能都是一样的,同样也是一把双刃剑,不同的场景选择不同的可变字符串类型

jdk中StringBuilder调优以及intern();方法应用(main函数中)
注意:默认放在类(class)中的字符串是放在池中的,是不可以改变的
再次注意:需要拼接的时候jdk自动对字符串进行扩容调优,不管你拼接多少个字符串,最后只是一个字符串在不停的扩容、拼接,实际上只有一个地址(不会产生任何中间变量)

/** 
* @author Ziph
* @date 2020年3月3日
* @Email mylifes1110@163.com
* 
* intern();
* 手动在程序运行中,将字符串放在池中
* 要求:满足首次出现
*/
public class TestStringOptimize {
	public static void main(String[] args) {
		String ss1 = "www.";//直接声明、首次出现、且存储在池中
		String ss2 = ss1 + "baidu.cn";//jdk自动优化StringBuilder.toString()得到一个一个新对象并存储在堆中
		String ss3 = "www.baidu.cn";//直接声明、存储在池中
		System.out.println(ss2 == ss3);	//地址不同返回false
		
		
		System.out.println("---------------------------");
		
		
		String s1 = "www.";	//直接声明、首次出现、且存储在池中
		String s2 = s1 + "ziph.cn";	//jdk自动优化StringBuilder.toString()得到一个一个新对象并存储在堆中
		s2.intern();	//手动将首次出现的字符串放在池中
						//假如将这一句代码s2.intern();放在下一句的后面则将字符串放在池中失败,因为不满足字符串首次出现
		String s3 = "www.ziph.cn";	//发现池中有不可改变的字符串,取出复用
		System.out.println(s2 == s3);	//因为都是池中的那个字符串,地址没有发生改变返回true
		
		
		System.out.println("---------------------------");
		//jdk调优过程就是相当于jdk创建了一个字符串缓冲区,省略了中间变量的空间,减少没有必要的内存占用
		
		
		String sss1 = "abc";
		String sss2 = sss1 + "def";//调用StringBuilder.append();
		
		StringBuilder stringbuilder = new StringBuilder();//可变字符串(缓冲区)
		stringbuilder.append("def");//StringBuilder类型的对象"abcdef"
		String sss3 = stringbuilder.toString();//转换成对象
		
		String sss4 = "abcdef";
		
		System.out.println(sss3 == sss4);	//返回false


		System.out.println("---------------------------");


		String str = "HelloWorld";
		MyClass m = new MyClass();
		System.out.println(m.string3 == str);//这时候类中的字符串存储在池中,直接取出,地址不变,返回true
	}
}

class MyClass {
	String string1 = "Hello";
	String string2 = string1 + "World";
	String string3 = "HelloWorld";
}

jdk中StringBuilder字符串调优和intern();方法jdk中StringBuilder字符串调优和intern();方法 Ziph 发布了82 篇原创文章 · 获赞 138 · 访问量 2万+ 私信 关注
上一篇:String两 种 对 象 实 例 化 方 法 的 区 别


下一篇:String当中的intern()