java面试题(杨晓峰)---第五讲String、StringBuffer、StringBuilder有什么区别?
线程
字符 操作频繁度
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有什么区别?的更多相关文章
- java面试题(杨晓峰)---第二讲Exception和Error有什么区别?
本人总结: Exception和Error:正常问题和意外问题,以自行车举例:没气和爆胎. ①理解Throwable,Exception,Error的设计和分类. ②掌握哪些应用最广泛的子类, ③如何 ...
- final,finally,finalize有什么区别?String, StringBuffer, StringBuilder有什么区别?Exception和Error有什么区别?
继上篇JVM学习之后,后面将分三期深入介绍剩余JAVA基础面试题,每期3题. 题目一.final,finally,finalize有什么区别? /*请尊重作者劳动成果,转载请标明原文链接:*/ /* ...
- java面试题(杨晓峰)---以面试题为切入点,有效提升你的java内功
java是一门历史悠久的编程语言,可以毫无争议的说,java是最主流的编程语言之一.全球有1200万以上的java程序猿以及海量的设备,还有无所不能的java生态圈. 我所知道的诸如阿里,京东,百度, ...
- java中String,StringBuffer,StringBuilder之间的区别
文章转载自:http://www.cnblogs.com/frankliiu-java/archive/2010/07/05/1771537.html String是固定长度的字符串,如果要发生变化必 ...
- java面试题(杨晓峰)---第七讲谈谈int和integer有什么区别?
理解装箱和拆箱的过程. 对象由三部分组成:对象头,对象实例,对齐填充. 对象头:一般是十六个字节,分两部分,第一部分:哈希码,锁状态标志,线程持有的锁,偏向线程id,gc分代年龄等,第二部分是类型指针 ...
- java面试题(杨晓峰)---第六讲谈谈动态代理是基于什么原理?
我在编译时不知道,而在运行时知道,那么肯定在运行时给了提示,这个提示就是额外功.好处是可以重复利用相同代码. 代理模式:通过代理静默的解决一些与业务无关的问题,例如远程,安全,事物,日志,资源关闭,. ...
- java面试题(杨晓峰)---第四讲强引用、软引用、弱引用、幻想引用有什么区别?
在java语言中,除了原始数据类型的变量,其他所有都是所谓的引用类型,指向各种不同的对象,理解引用对于掌握java对象生命周期和JVM内部相关机制非常有帮助. 今天问题:强引用.软引用.弱引用.幻想引 ...
- java面试题(杨晓峰)---第三讲谈谈final、finally、finalize有什么不同?
java语言有很多看起来相似,但用途却完全不相同的语言要素,这些内容往往容易成为面试官考察你知识掌握程度的切入点. 今天我要问你一个基础的java经典题目,谈谈final.finally.finali ...
- java面试题(杨晓峰)---第一讲谈谈你对java平台的理解
本人总结: 面向对象(封装,继承,多态) 平台无关性(jvm运行,class文件) 语言(泛型,lambda) 类库(集合,并发,网络,io/nio) jre(java运行环境,JVM,类库) JDK ...
随机推荐
- 转:在Linux上安装ant环境
1.从http://ant.apache.org 上下载tar.gz版ant 2.复制到/usr下 3.tar -vxzf apahce-ant-1.9.2-bin.tar.gz 解压 4.chow ...
- 使用c语言实现的常用函数
/* 为了面试准备的,有些在工作中也可以用用,本人算法方面比较欠缺,如果有更优秀的算法麻烦告诉我啊 */ /* strcat的实现 */ #include <assert.h> char* ...
- .net过滤器重写beginrequest
在J2EE Web开发中有过滤器filter,该filter可以对指定的URL访问进行拦截,并执行过滤器的方法,根据实际应用情况,在过滤器中修改请求的代码.判断会话信息,也可以做权限控制,总之这个过滤 ...
- 493. Reverse Pairs(BST, BIT, MergeSort)
Given an array nums, we call (i, j) an important reverse pair if i < j and nums[i] > 2*nums[j] ...
- 一些unity资源
雨凇解包 http://www.xuanyusong.com/archives/3618 http://www.cnblogs.com/lixiang-share/p/5840444.html u3d ...
- 洛谷P3405 [USACO16DEC]Cities and States省市
P3405 [USACO16DEC]Cities and States省市 题目描述 To keep his cows intellectually stimulated, Farmer John h ...
- PHP composer 日常使用命令和理解
composer的操作很多很杂,平时大都用不上,正要找又一时半会难找到 日常操作,走起 第一部分 : 安装 composer.json composer init 这个命令创建了一个 composer ...
- STP-12-MST工作原理
MST将网络划分为一或多个区域.一个MST区域是一组以相同方式共同使用MST的交换机——除了其他特性外,它们运行相同数量的MST实例,并在这些实例上映射相同的VLAN集合. 例如,在下图中,工程师定义 ...
- 更新常用的js工具函数
在手机调试时打印代码<script src="https://cdn.bootcss.com/vConsole/3.3.0/vconsole.min.js"></ ...
- Codeforces Round #566 (Div. 2) C. Beautiful Lyrics
链接: https://codeforces.com/contest/1182/problem/C 题意: You are given n words, each of which consists ...