java字符串学习:String,StringBuilder,StringBuffer的学习

  今晚重新学了一下java字符串的知识,使自己了解到自己以前忽略了不少问题。学习java字符串,至少要了解到以下几点:
  1、学会使用String类中的常用方法
  2、了解字符串的不可变量特性
  3、什么是字符串池
  4、==与equals()方法比较两字符串的不同点。
  5、"+"使用字符串串联上的负担,区分出StringBuilder和StringBuffer的使用场所
  java字符串池:
  字符串池",是Java为了提高内存利用率而采用的措施:当遇到String a = "Hello"; 这样的语句时,Java会先在字符串池中寻找是否已经存在"Hello"这个字符串,如果没有,则建立字符串"Hello"对象,然后变量 a 指向这个地址;然后遇到语句String b = "Hello",这时字符串池中已经有 "Hello"了,所以直接让变量b也指向这个地址,省去了重新分配的麻烦。而在Java中,操作符"=="对于两个基本型来说,是判断其内容是否相同,对于两个对象来说,则是判断其地址是否相同,所以a == b返回 true。那么String c = new String("Hello")又如何处理呢?如果是这种写法,则不会去访问字符串池,而是先为变量 c 开辟空间,然后将值写入空间。所以a == c返回false,c == d同样返回false。至于String的equals方法,因为它比较的不是对象的地址,而是对象的值,所以都返回true就不奇怪了。
  Java虚拟机有一个字符串池,保存着几乎所有的字符串对象。字符串表达式总是指向字符串池中的一个对象。使用new操作创建的字符串对象不指向字符串池中的对象但是可以使用intern方法使其指向字符串池中的对象(注:如果池中已经有相同的字符串--使用equals方法确定,则直接返回池中的字符串,否则先将字符串添加到池中,再返回)。池中两个相等的字符串如果使用"=="来比较将返回真。
  StringBuilder类:
  一个String对象的长度是固定的,不能改变它的内容,或者是附加新的字符至String对象中。可以使用+来串联字符串以达到新字符或字符串的目的。但+会产生一个新的String实例。如果程序对这种附加字符串的需求很频繁,效率会变低。使用StringBuilder比String用+的方法效率会高。
  StringBuffer类:
  在J2SE 5.0之前,使用java.lang.StringBuffer来串联字符串,后来,在J2SE 5.0的时候,新增了StringBuilder,和StringBuffer具有相同的操作接口。在单机非多线程的情况下使用StringBuilder会有较好的效率,因为StringBuiler没有处理同步(Synchronized)问题。而StringBuffer则会处理同步问题,如果StringBuidler会在多线程下被操作,则要改用String Buffer,让对象自行管理同步问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值