首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    String的内存模型,为什么String被设计成不可变的

    面试题虽然被很多牛人说low(请别再拿“String s = new String("xyz");创建了多少个String实例”来面试了吧),但确实经常出现new String以及几个对象之类的问题。...String str2 = str.concat(""); Assert.assertFalse(str2 == str); 按照String不可变的特性来理解,这里str2应该是生成的新对象,那么肯定不等于...1.3 String是final的 由于String被声明式final的,则我们不可以继承String,因此就不能通过继承来复写一些关于hashcode和value的方法。 2....因为缓存字符串对性能来说至关重要,因此为了移除这种风险,String被设计成Immutable。 HashMap的需要 HashMap在Java里太重要了,而它的key通常是String类型的。...总之,安全性和String字符串常量池缓存是String被设计成不可变的主要原因。

    1.2K130

    由String,String Builder,String Buffer 引起的面试惨案

    str = str + ""; System.out.println(str); } } 面试官:String类可以被继承嘛?...小宅:不可以,因为String类使用final关键字进行修饰,所以不能被继承,并且StringBuilder,StringBuffer也是如此都被final关键字修饰。...这个主要是由于CPU的时间片原因,可能执行到一半被挂起了,然后别的线程把值给改了,这个时候程序就可能将错误的值设置进去,导致结果异常。   ...在升级为轻量级锁前,持有偏向锁的线程T1会被暂停,并检查T1的状态,如果T1处于未活动的状态/已经退出同步代码块的时候,T1会释放偏向锁并被唤醒。...'u'; value[c++] = 'l'; value[c++] = 'l'; count = c; return this; } 从代码中可以发现,如果传入的字符串是null时,调用

    1K31

    【每日小知识】String StringBuffer 、 StringBuilder 、String

    可变性 简单的来说:String 类中使用 final 关键字修饰字符数组来保存字符串,private final char value[],所以 String 对象是不可变的。...StringBuilder 与 StringBuffer 的构造方法都是调用父类构造方法也就是 AbstractStringBuilder 实现的,大家可以自行查阅源码。...线程安全性 String 中的对象是不可变的,也就可以理解为常量,线程安全。...StringBuffer 对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。StringBuilder 并没有对方法进行加同步锁,所以是非线程安全的。 ...性能 每次对 String 类型进行改变的时候,都会生成一个新的 String 对象,然后将指针指向新的 String 对象。

    79820
    领券