JAVA--------一篇搞懂String,new String,char[ ],StringBulid,StringBuffer

先叙述char[ ],string,new string这部分内容

Java里面的char[ ],string,new string
Java里面char[ ]数组和string不一样,
只不过string的底层原理用的char[]数组.

String:在栈空间创建一个引用,然后去字符串常量池,去查有没有这个字符串,如果有,直接指向;
如果没有,就在字符串常量池创建这个字符串,然后指向.

New string:他会在堆空间创建新的对象,并检测字符串有没有这个字符串,如果有,就直接指向这个value(值),如果没有,他会创建这个value,再去指向.

eg:
代码及图解如下:

		String s1 = "nb";
		String s2 = "nb";
		//System.out.println(s1==s2);//true
		String s3 = new String("nb");
		String s4 = new String(s1);
		String s5 = new String(s3);
		//System.out.println(s1==s3);//false
		//System.out.println(s1==s4);//false
		//System.out.println(s1==s5);//false
		
		char [] cs = {'n','b'};//char类型不创建对象
		String s6 = new String(cs);
		//System.out.println(s1==s6);//false
		String s7 = new String(s6);
		//System.out.println(s6==s7);//false

(除s1和s2共用同一个对象,其他均重新创建了一个新的实例化对象)
(在字符内容一样的情况下,string第一次会new一个实例化对象,第2次,第3次…之后都会共用同一个实例化对象;
但是,new string的话,每次都会创建一个新的实例化对象)
在这里插入图片描述
记住两点:
①所有字符串字面量(比如"abc")都是String类型的实例
②从Java7开始,字符串长常量池开始属于推空间的一部分(以前放在方法区).

再叙述String,StringBulid,StringBuffer这部分内容

运行速度:
StringBuilder>StringBuffer>String

String:适用少量的字符串操作
StringBuilder:适用于单线程下载字符缓冲区进行大量操作的情况
StringBuffer:适用于多线程下在字符缓冲区进行大量操作的情况下(StringBuffer的方法大多有锁)

StringBulider有点像动态数组

待补充…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

踏过山河,踏过海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值