String,StringBuffer和StringBuilder

标签(空格分隔): Java


1. 为了实现运行时常量池实现细粒度颗粒对象的复用.

如题

2. 为了安全

字符串是不可变的, 所以是多线程安全的, 同一个字符串可以被多个线程共享. 这样便不用因为线程安全问题而使用同步(牵扯到Volatile关键字). 字符串自己便是线程安全的.

数据库的用户名,密码都是以字符串的形式传入来获得数据库的链接, 或者在Socket编程中, 主机的主机名和端口都是以字符串的形式传入的, 因为字符串是不可变的, 所以值是不可变的, 否则黑客可以改变字符串指向的对象的值, 造成安全漏洞. (非安全专业, 但是这种东西 还是和纸糊的墙差的不).

3. 为了实现String可以创建HashCode不可变性

字符串是不可变的, 所以他在创建的时候HashCode就被缓存了, 不需要重新计算, 这就使得字符串很适合作为Map中的键, 字符串的处理速度也要快过其他键的对象. 所以HashMap中的键一般都是字符串.


但是因为上述的方便只能牺牲一些东西,但是作为成年人一定要选择我都要,然后就产生了StringBuffer和StringBuilder.

StringBuffer和StringBuilder的产生使为了解决大量拼接字符串时产生很多中间对象的问题,而提供的个类.

但是为什么要有两个呢 ?

依然使线程问题,stringBuffer加了线程锁,在多线程的情况下可以安全使用,而只有单线程的情况下我们使用 StringBuilder,它没有线程锁所以性能更高.

posted @ 2019-05-27 09:00  X-POWER  阅读(185)  评论(0编辑  收藏  举报