上周加班,这周依然如此(今天早上还真是冷,冬天真的来了...)
StringBuffer和StringBuilder相信筒子们都了解的比较透彻
1.为什么要写?
在弄convert Object to Json的时候,无意看了下json的sourcecode,发现它用的是StringBuilder, 思绪一下子就回到了刚毕业的青葱岁月。
还记得那时还很年轻,青春就如同奔流的江河,而现在青春,一去不回 来不及道别,只剩下麻木的我 没有了当年的热血。
当时奔波面试,狂背网上down的试题,比较经典的就是String、StringBuffer、StringBuilder的区别,因为没有具体应用,所以总是背完过不了几天就forgot了。面试的时候总会说:String是不可变的,StringBuffer是可变+thread-safe,StringBuilder是可变+thread-unsafe的。如果再深问一句,我肯定说不出the rootcause.
工作了几年,也看了一些书籍文章和source,从上面的场景总结下
code:
(1)String之所以不可变,String.class is final 并且它的变量都是final的
public final class String implements java.io.Serializable, Comparable<String>, CharSequence{
private final char value[];
}
上面这一行的code,我随便联想一下:
(a) final这个keyword其实是可以引申出很多的知识点的.比如final修饰的方法,修饰的类,修饰的变量都有什么限制?final修饰的方法能不能被override?final修饰的东西放在JVM中什么area里? 是young,old or permanent?
(b) String其实也是由字符数组搞定的, 看看数组的概念是so foundational(you can do everything by array and reference)
(c) implements Serializable interface, 不多说,也是base knowledge
(2) StringBuffer (我之前所在公司项目大量使用)
public final class StringBuffer extends AbstractStringBuilder
implements java.io.Serializable, CharSequence
{
public synchronized StringBuffer append(Object obj) {
super.append(String.valueOf(obj));
return this;
}
}
(a)extends AbstractStringBuilder扩展了抽象类,对基类的append加入同步机制, so it's thread-safe.看到这里,就不得不说Thread的一些knowledge了,比如同步方法lock的是object or class?如果我要加个static那结论又如何呢?
(b)线程同步问题真的是一个非常interesting and hot-blooded的技术,以前一直搞SQL CURD,一次interview,连wait,notify/notifyall都搞不清。
(c) extends + implements 组合真的可以OO,不是XXOO,是OO。⊙﹏⊙b汗 ,最近看tomcat sourcecode,tomcat里用了很多这样的组合,并且JDK也是,以前从未关注过,也是看了OO方面的书籍,似乎是懂了一些什么样的应该implements,什么样的应该extends(不是语法含义的问题,而是对于现实问题的抽象边界问题)
(d)其实StringBuffer也是final的,为什么是可变的呢?这就归咎与JVM中const pool与object的概念了。引申一下,java是传值还是传引用呢?呵呵
(3)StringBuilder
和StringBuffer一样,只不过append不是同步方法.不细说了.
(4)java compiler 其实内部是喜欢StringBuilder的,比如2个StringObject操作的时候,是转换成StringBuilder的。
结论:如果不需要同步的时候,优先使用StringBuilder,你懂的
Postscript
一个类型转换搞这么一堆rubbish word。前2天还联想到一件事,去食堂吃饭的时候,一般大点的食堂都是有专门的窗口收费,打饭另外的窗口。
说到这里,你能想到什么?“啥,你说啥,午饭几个菜?? 别胡说”
不管你想到没有,反正我是想到了,multiple-thread
抽象一下:收费窗口是主线程,负责accept 请求(吃饭请求),然后入queue(排队打饭的queue那时一个长啊),打饭的胖师傅就是workthread,负责给你丫打饭。像不像我们常用的webserver,没错,就是这个意思,你懂的.
single thread -- >a task per thread --> threadpool (Doug Lea 估计经常吃食堂的,人家就能写出那么优秀的code)
绝对原创,随便喷 ,restriction只有一条,转载请标出处
分享到:
相关推荐
【联想LCSE初级工程师认证】涉及的知识点涵盖了Windows 2000操作系统的基础知识,包括其版本、用户登录、文件系统、硬件配置、注册表、存储类型、IP配置以及网络诊断工具和活动目录等。 1. **Windows 2000版本**:...
联想ThinkSystem DE系列存储配置教程 联想ThinkSystem DE系列存储配置教程是联想提供的存储配置解决方案,旨在帮助用户快速配置存储系统。本教程涵盖了DE系列存储的基本配置、池和卷组的创建、工作负载的定义、卷的...
【联想万全R51S服务器】是一款由联想公司推出的服务器产品,主要应用于企业级的数据服务和业务技术领域。此服务器的设计和优化旨在提供高效、稳定的数据处理能力,支持企业的关键业务运行。 在软件设计和重构的过程...
7.6.3 链接到外部类 7.6.4 static内部类 7.6.5 引用外部类对象 7.6.6 从内部类继承 7.6.7 内部类可以覆盖吗? 7.6.8 内部类标识符 7.6.9 为什么要用内部类:控制框架 7.7 构建器和多形性 7.7.1 构建器的调用顺序 ...
泛型是Java 5引入的新特性,用于提供类型安全的集合,避免了类型转换的麻烦和潜在的ClassCastException。 十、Java注解(Annotation) 注解提供了一种元数据的方式,可以向编译器或JVM提供有关代码的额外信息,例如...
- **OSI(Open Systems Interconnection)模型**:这是一个由国际标准化组织(ISO)提出的网络通信协议模型,分为七层:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。 - **TCP/IP(Transmission ...
1. **中文语音朗读模块.ec**:这个模块提供了中文文本到语音的转换能力,使得程序能够以语音形式播报信息,增强了人机交互体验。 2. **自解压制作1.ec、自解压制作.ec**:这些模块可能用于创建自解压文件,即可以...
2. 数据预处理:在分析数据之前,通常需要预处理,包括数据清洗(去除缺失值、异常值、重复值)、数据转换(如标准化、归一化)、数据类型转换(如将文本数据转换为数值)。Python的`pandas`库在这方面非常强大,...
在标签"protobuf"中,我们可以联想到以下知识点: 1. **数据序列化**:protobuf提供了一种方法,将复杂的对象结构转化为简单的字节流,便于在网络间传输或持久化存储。 2. **语言支持**:protobuf支持多种编程语言,...
### IT专业知识点解析 #### 一、网络基础知识 **1.... - **OSI七层模型**: ...以上知识点涵盖了华为、联想、普天和润汇等公司的笔试题目中涉及的核心概念和技术细节,旨在帮助准备应聘者更好地理解和掌握相关技术要点。
1. 选择题的第一题涉及到数据类型的转换和运算。表达式D中的"2.13"和SUBSTR("联想汉字操作系统",5,12)的结果是字符串相加,所以结果为字符型。 2. 第二题讨论自由表的特性。自由表是可以独立于数据库存在的表,VFP...
在本篇文章中,我们将深入探讨接口的三大特征——多态,引用类型转换,以及接口在Java语言中的应用和实现。 ### 接口 接口是Java中的一种引用数据类型,可以被看做是一个完全抽象的类。接口中的所有成员方法都是...
标题和描述中提到的是关于C语言的函数指针的研究,主要涉及了函数指针的使用、强制类型转换以及函数指针数组的概念。以下是对这些知识点的详细解释: 1. 函数指针: 函数在C语言中可以被视为一等公民,即可以被...
很抱歉,根据您提供的信息,"第三...虽然“第三章语言是符号”的描述可能源自一本关于语言学的教材,但我们可以从中联想到编程语言和符号在IT领域的重要性。了解并熟练掌握这些知识点对于成为专业的IT从业者至关重要。
综上,广告的吸引力与注意力策略涉及心理学原理的运用,如利用各种注意类型的特点,结合消费者的知觉基础、学习、记忆、想象与联想,创造引人入胜的广告内容,从而提高广告传播的效果。在实际操作中,广告人应综合...
8. **联想思维训练**:解释联想的定义,给出联想的两种类型,即性质相似和经验相关的联想,并举例说明。 9. **议论文写作**:剔除赘余句子,重组语段,以形成层次清晰的议论型语段,这需要对句子间的逻辑关系有良好...
8. 问题解决类型:从初始状态到目标状态的一系列操作转换问题,是问题解决的一种形式。 9. 学习感知:人的学习主要通过视觉,视觉信息处理在学习中占有主导地位。 10. 认知发展阶段:不再刻板遵循规则,而是根据...
- 讨论型存在性问题:通常需要判断数学对象是否存在,可以先假设存在或不存在,再转换问题类型处理。 4. 平行四边形和三角形的性质与判定: - 在选择题中,涉及了判定三角形全等和平行四边形的各种条件,如对应边...
到加密的话题,一些读者一定非常感兴趣,而且会联想到复杂的加密 算法,本实例主要使用异或“^”运算符简单地实现了对数字加密的 功能。实例运行效果如图19.1 所示。 关 键技术 本实例实现时主要使用了“异或”...