不可变性的优点(以String为例)

不可变类简述:

不可变类就是这个类的实例一旦创建完成后,就不能改变其成员变量的值。

  1. 不可变类用final修饰,保证其不可以被继承。
  2. 不可变类的所有成员变量都是私有的,并且需要final修饰。
  3. 不提供修改成员变量的方法。
  4. 通过构造函数来初始化所有成员。
  5. 类中的getter方法不直接返回对象本身,而是新建一个一模一样对象进行返回。

String对象的不可变性的优点

  1. 保证多线程安全:同一个String可以被多个线程同时使用,不需要考虑同步问题,因为该类的值无法被改变。String被线程使用时只可以读,不可以写,又因为多个线程可以同时读,不可同时写或者同时读写,因此String可以被多个线程同时用,也不必考虑线程安全问题。
  2. 便于配合常量池的使用:常量池会把一些相同的字符重复使用,避免每次都创建相同的对象,节省空间。所以就可能存在两个相同内容的String类指向常量池的同一字符串。当其中一个String变量改变时会创建新的空间来存储,不会对原来空间存放的字符串产生任何影响。因此就保证了另一个String变量的内容不会受影响。当没有String变量指向该空间时该空间会被java JVM自动回收,不会造成内存浪费。
  3. 避免了许多网络安全问题:网络上数据库的用户名、密码等都是以String的形式传入来连接相应的数据库,如果String是可变的那么就容易被其他人钻空子修改你输入的String的值造成安全隐患。而且我们输入的用户名,密码等都是不需要改变的因此String为不可变类既可以保证安全又不影响用户使用。
  4. 提高运行速度:String在创建的时候被hashcode给缓存了,不需要重新计算。因此在String的处理速度上往往比其他可变类要快。例如同样是要输出一个字符串的长度,该字符串被可变类存储时需要先计算才可以输出该字符串的长度。而被String存储时不需要计算,直接有变量存储字符串的长度,直接输出即可。这样就大大节约了程序运行的时间。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值