第十三章:字符串 《Thinking in java》学习笔记

正如书中开头所说:字符串操作是计算机程序中最常见的行为;尤其是再java大展拳脚的web系统中更是如此,下面就java的字符串的特性,个人做下总结吧,有错误的地方希望有人能提出,我一定会及时更正。

学过编程的都会知道,字符串是常量中的一种,然而java中的string不仅仅是常量,又是类,是一个特殊的类,是不可变和最终类;

1,不可变的string;说到不可变性,就要说java中string的内存分配了,如下图

当运行代码:

string str = "abc";

时,内存分布为

这时候看起来和一个int a = 26;很相似了,stringpool是常量池里面用来存放字符串常量的地方,里面的值不可修改

而如果代码是这样写的:

string str = new string("abc");

运行时,内存为:

理解了上面的内存分布情况后,就不难理解string的不变性了,java中程序员不能重载操作符,用于string的“+”和“+=”是java中仅有的两个重载过的操作符;

比如如下代码:

string str1 = "abc";

string str2 = str1 + "def";

运行到第二行代码时,实际上jvm又一次帮助我们做了一些工作:

1 public class mystring {

2public static void main(string[] args){

3string str1 = "abc";

4stringbuilder temp = new stringbuilder("abc");

5temp.append("def");

6string str2 = temp.tostring();

7}

8 }

内存分配如下:

而其中j2se5.0之后才使用了stringbuilder,之前是使用的stringbuffer,

二者使用起来没有什么区别,stringbuffer是线程安全的,速度慢些;stringbuilder是线程不安全的,但是速度快些;

2,string是最终类,不能有子类,这一点可以通过api文档看出:

public final class string extends object implements serializable, comparablestring>, charsequence{

....

}

ps: 天气真冷,手敲键盘都哆嗦,干脆就画画内存图来说明了,没有用什么代码来证明,再说大家日常编码中不会一日无string,所以也不需要我写多少字符串的代码了;

还有,本章书中还介绍了一个重要的部分--《正则表达式》,这部分我自己也不是很熟悉,知道些而已,具体底层的实现我也不清楚,等日后补上吧。


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值