线程

字符 操作频繁度

1 String

  (1)String的创建机制

由于String在java世界中使用过于频繁,java为了避免在一个系统中产生大量重复的String对象,引入了字符串常量池,其运行机制是:创建一个字符串时,首先检查常量池中是否有值相同的字符串对象,如果存在相同字符串则直接使用常量池中的字符串引用,如果不存在新建字符串对象并放入常量池,但是,例外通过new方法创建的String对象是不检查常量池,而是直接在堆或栈中创建对象,并且不会把对象放入常量池。

举例:

String str1=“123”;

String str2=new String(“123”);

注意:String提供inter()方法,调用该方法时,首先检查常量池中是否有值相同的字符串对象,如果存在相同字符串则直接使用常量池中的字符串引用,如果不存在新建字符串对象并放入常量池,

  (2)String的特性

    【A】不可变,应对多线程需要。是指String对象一旦生成,则不能在对他进行改变。不可变的主要作用是当一个对象需要被多个对象共享并且频繁访问时,可以省略同步和锁等待的时间,从而大幅提高系统性能。不可变模式可以大幅提高系统性能,降低多线程程序复杂度。

    【B】针对常量池的优化.当两个String对象拥有相同的值时,他们只引用常量池中的同一个拷贝.当同一个字符串反复出现时,这个技术可以大幅节省内存空间

2 StringBuffer/StringBuilder:值可变

StringBuffer和StringBuilder都实现了AbstractStringBuilder抽象类,两者拥有几乎一致的调用接口,其底层在内存中的存储方式与String相同,都是以一个有序的字符序列进行存储,

不同点:两者对象的值可以改变,并且值改变以后,对象引用不会发生改变,两者对象在构造过程中,首先按照默认大小申请一个字符数组,在使用过程中如果不断添加值使大小超过原先范围时,就创建一个更大的新数组在将原先的值复制进来,丢弃旧数组.因此预先评估可以提升性能.

注意:StringBuffer是线程安全的,StringBuilder是线程不安全的.(不了解)

3.应用场景

[A]String: 在字符串内容不经常发生变化的场景优先使用String类.其中尽量避免大量使用string之间的"+"操作,因为会产生大量无用中间对象,耗费空间,执行效率低.例如常量声明.

[B]StringBuffer: 频繁对字符串进行运算(如拼接,替换,删除等),并且运算在多线程环境下例如xml解析,HTTP参数解析与封装.

[C]StringBuilder:频繁对字符串进行运算(如拼接,替换,删除等),并且运算在单线程环境下例如SQL语句拼接,JSON封装等.

java面试题(杨晓峰)---第五讲String、StringBuffer、StringBuilder有什么区别?的更多相关文章

  1. java面试题(杨晓峰)---第二讲Exception和Error有什么区别?

    本人总结: Exception和Error:正常问题和意外问题,以自行车举例:没气和爆胎. ①理解Throwable,Exception,Error的设计和分类. ②掌握哪些应用最广泛的子类, ③如何 ...

  2. final,finally,finalize有什么区别?String, StringBuffer, StringBuilder有什么区别?Exception和Error有什么区别?

    继上篇JVM学习之后,后面将分三期深入介绍剩余JAVA基础面试题,每期3题. 题目一.final,finally,finalize有什么区别? /*请尊重作者劳动成果,转载请标明原文链接:*/ /* ...

  3. java面试题(杨晓峰)---以面试题为切入点,有效提升你的java内功

    java是一门历史悠久的编程语言,可以毫无争议的说,java是最主流的编程语言之一.全球有1200万以上的java程序猿以及海量的设备,还有无所不能的java生态圈. 我所知道的诸如阿里,京东,百度, ...

  4. java中String,StringBuffer,StringBuilder之间的区别

    文章转载自:http://www.cnblogs.com/frankliiu-java/archive/2010/07/05/1771537.html String是固定长度的字符串,如果要发生变化必 ...

  5. java面试题(杨晓峰)---第七讲谈谈int和integer有什么区别?

    理解装箱和拆箱的过程. 对象由三部分组成:对象头,对象实例,对齐填充. 对象头:一般是十六个字节,分两部分,第一部分:哈希码,锁状态标志,线程持有的锁,偏向线程id,gc分代年龄等,第二部分是类型指针 ...

  6. java面试题(杨晓峰)---第六讲谈谈动态代理是基于什么原理?

    我在编译时不知道,而在运行时知道,那么肯定在运行时给了提示,这个提示就是额外功.好处是可以重复利用相同代码. 代理模式:通过代理静默的解决一些与业务无关的问题,例如远程,安全,事物,日志,资源关闭,. ...

  7. java面试题(杨晓峰)---第四讲强引用、软引用、弱引用、幻想引用有什么区别?

    在java语言中,除了原始数据类型的变量,其他所有都是所谓的引用类型,指向各种不同的对象,理解引用对于掌握java对象生命周期和JVM内部相关机制非常有帮助. 今天问题:强引用.软引用.弱引用.幻想引 ...

  8. java面试题(杨晓峰)---第三讲谈谈final、finally、finalize有什么不同?

    java语言有很多看起来相似,但用途却完全不相同的语言要素,这些内容往往容易成为面试官考察你知识掌握程度的切入点. 今天我要问你一个基础的java经典题目,谈谈final.finally.finali ...

  9. java面试题(杨晓峰)---第一讲谈谈你对java平台的理解

    本人总结: 面向对象(封装,继承,多态) 平台无关性(jvm运行,class文件) 语言(泛型,lambda) 类库(集合,并发,网络,io/nio) jre(java运行环境,JVM,类库) JDK ...

随机推荐

  1. windows7无法启动Telnet服务,出现…

    windows7无法启动Telnet服务,出现错误1068 2012 年 03 月 16 日 在[控制面板--程序--打开或关闭Windows功能]中开启telnet服务器和客户端后,在运行窗口中输入 ...

  2. CodeForces 489C Given Length and Sum of Digits... (dfs)

    C. Given Length and Sum of Digits... time limit per test 1 second memory limit per test 256 megabyte ...

  3. FZU 2059 MM (并查集+排序插入)

    Problem 2059 MM Accept: 109    Submit: 484Time Limit: 1000 mSec    Memory Limit : 32768 KB  Problem ...

  4. JAVA企业级开发-jdbc入门(09)

    一. jdbc介绍 JDBC全称为:Java DataBase Connectivity(java数据库连接). SUN公司为了简化.统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JD ...

  5. OVS编译

    下载源码 # git clone https://github.com/openvswitch/ovs.git # cd ovs # git checkout branch-2.8 下载依赖包 # y ...

  6. 关于unity中BindChannels的理解

    http://blog.csdn.net/wpapa/article/details/51794277 官方文档:http://docs.unity3d.com/Manual/SL-BindChann ...

  7. codevs 2314 数学作业

    2314 数学作业 2011年省队选拔赛湖南  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Master     题目描述 Description 小 C 数学成绩优异 ...

  8. 洛谷 P2048 [NOI2010]超级钢琴(优先队列,RMQ)

    传送门 我们定义$(p,l,r)=max\{sum[t]-sum[p-1],p+l-1\leq t\leq p+r-1 \}$ 那么因为对每一个$p$来说$sum[p-1]$是一个定值,所以我们只要在 ...

  9. for循环,递归,函数封装作业

    /******求100以内,所有的奇数和,求100以内,所有的偶数积*******/ // for循环方法   var sum=0; var sum1=1; for(var i=1;i<=100 ...

  10. Nacos深入浅出(六)

    其实我们发现在我们本地新生成了文件,这个文件就是nacos; 这个文件怎么那么眼熟,不就是我们的controller中的注解里面的参数value么: @Controller @NacosPropert ...