String

String表示字符串类型,属于引用数据类型

不可变的好处

1.便于实现字符串池(String Pool)

        不同的字符串引用都可以指向池中的同一个字符串。‌这种设计可以大大减少内存消耗,‌提高程序的运行效率。

2.避免安全问题

        在数据库连接或网络通信中,‌用户名、‌密码等敏感信息以字符串形式传输,‌如果字符串可变,‌可能会有人利用这一特性改变字符串的值,‌从而造成安全漏洞。

3.使多线程安全

        多个线程可以同时共享同一个字符串实例,‌而不需要进行同步操作,‌这简化了多线程环境下的编程,‌避免了因线程安全问题而导致的并发问题。

4.加快字符串处理速度

        因为字符串是不可变的,‌所以在创建时其哈希值被缓存,‌不需要重新计算。‌这使字符串非常适合作为Map集合的键,‌从而加快了字符串的处理速度。

String StringBuffer StringBuilder的区别

1.可变性

  • String是不可变的,一旦创建就不能修改其内容。再次对一个String类型赋值时,并不是对原来堆中的实例对象进行重新赋值,而是生成一个新的实例对象。
  • StringBuffer和StringBuilder都是可变的,可以修改其内容。

2.线程安全性

  • StringBuffer的公开方法都被synchronized修饰,确保了线程安全,适合多线程环境下的操作。
  • StringBuilder没有方法进行synchronized修饰,因此认为线程是不安全的,适合单线程环境下的操作。

3.使用场景

  • String用于表示不可变的字符串常量。
  • StringBuffer用于多线程环境中操作字符串的情况。
  • StringBuilder用于单线程环境下进行大量操作字符串的情况。

String Pool

String Pool 为字符串常量池,存在于堆空间中,是堆空间中专门开辟出的一块空间用于存放字符串常量池

String Pool是一个固定大小的HashTable结构,由链表+数组形式组成

好处:

  1. 节省内存:相同内容的字符串只会被存储一次
  2. 提高性能:字符串的比较和查找可以通过引用比较进行,不是通过逐个字符进行比较
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值