Java面试题(六)-----简述什么是不可变类,编程实现一个不可变类
文章目录
✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
🔥一、相关概念
🙋所谓不可变类(Immutable class)是指创建了该类的实例之后,该实例的值在其整个生命周期都不能被修改。
🙋所谓该实例不能被修改,更确切的说指的是实例中所包含的成员的值不能被修改,也就是该实例的内容不能被修改。所以不可变类的实例类似于常量,它只允许程序对其读取,不允许程序对其修改。
🙋一个经典的不可变的例子就是String类型,在Java程序中一旦创建了String类型的实例,也就是一个字符串,该字符串的内容是无法被修改的。
🗯这里的str1只是一个指向字符串对象的引用,最开始的时候str1指向的字符串是Hello String, 然后将字符串"Hello Java"赋值给str1,其实就是使指向"Hello Java"而不是"Hello String"。这并不是字符串内容的改变。,而是引用变量str指向的内容发生了改变,这一点需要非常注意的。
🗯在Java中除了字符串类型外,还有许多不可变的类,例如基本数据类型的包装类Float Boolean等都属于不可变的类
🗯不可变类有什么优点呢?最大的优点就是不可变类可以去解决线程同步安全的问题,在多线程环境下,一个不可变类的实例是无法被修改的。这样避免了"一个线程更新数据二另外一个线程正在读取数据"的尴尬局面的发生。其次,不可变类用起来简单方便,容易构造,使用简单和测试,这些都是不可变类的优点。但是不可变类也存在一些缺点,因为不可变类会因值的不同或属性的改变而产生新的实例,所以会带来对象创建的系统开销。
🗯如何创建一个不可变类呢?只要遵循以下五条原则便可以创建一个不可变类。
✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨