String类细节问题
String类各种细节问题
oo于野
这个作者很懒,什么都没留下…
展开
-
为什么StringBuilder是线程不安全的?StringBuffer是线程安全的?
面试中经常问到的一个问题:StringBuilder和StringBuffer的区别是什么? 我们非常自信的说出:StringBuilder是线程不安全的,StirngBuffer是线程安全的 面试官:StringBuilder不安全的点在哪儿? 这时候估计就哑巴了。。。 分析 StringBuffer和StringBuilder的实现内部是和String内部一样的,都是通过 char[]数组的方式;不同的是String的char[]数组是通过final关键字修饰的是不可变的,而StringBuffer和S原创 2020-08-16 00:55:15 · 2333 阅读 · 0 评论 -
StringBuffer为什么是可变类
StringBuffer是可变的还是不可变的? 前言:我们知道String类的修饰符是final,其char[] value也是由final修饰的,每次给String变量赋一个新值,都会创建一个新的String对象,很多有涉及到字符串本身的改变都是伴有(new String)的字样,所以我们说String类是不可变类。但StringBuffer类也是由final修饰的呀,为什么它就是可变类了呢? 复制代码 public final class StringBuffer extends Abstrac原创 2020-08-16 02:11:17 · 2011 阅读 · 0 评论 -
String对象不可变的原理及好处
ps:主要是其内部使用了private final修饰成员,如果想修改,需要使用到反射技术 string方法的修改效果是通过新建StringBuilder来实现的,更老的版本使用StringBuffer,后者是线程安全版本,但效率较低 什么是不可变对象? 众所周知, 在Java中, String类是不可变的。那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的。不能改变状态的意思是,不能改变对象内的成员变量,包括基本数据类型的值不能改变,原创 2020-08-15 22:36:14 · 720 阅读 · 0 评论 -
String创建了几个对象
我们首先来看一段代码: Java代码 String str=new String(“abc”); 紧接着这段代码之后的往往是这个问题,那就是这行代码究竟创建了几个String对象呢?相信大家对这道题并不陌生,答案也是众所周知的,2个。接下来我们就从这道题展开,一起回顾一下与创建String对象相关的一些JAVA知识。 我们可以把上面这行代码分成String str、=、"abc"和new String()四部分来看待。String str只是定义了一个名为str的String类型的变量,因此它并没有创建对象转载 2020-08-15 23:21:35 · 2397 阅读 · 2 评论