在Java教程的学习上,我们经常会遇到不少的难点,毫无疑问,对于不少人来说,不可变类也是难点之一。
简单来说,当一个类的对象在通过构造方法创建后如果状态不会再被改变,那么它就是一个不可变类。它的所有成员变量的赋值仅在构造方法中完成,不会提供任何 setter 方法供外部类去修改。
大家应该都看过《盗墓笔记》或者《鬼吹灯》吧,当主角团进入墓穴中,总会不小心触发各种机关,然后回去的路就被堵死了。当然不可变类没有那么多机关,这个例子只是为了告诉大家不可变类到底有多么不可变。
程序员都爱多线程,因为它让生产力无限发达了,各种硬件能力终于有用武之地了。但爱的越深恨得越深,毕竟多线程会把对象状态搞的一塌糊涂。
所以我们就需要不可变类让对象的状态也变得不可变,这样的话,一旦要修改对象的状态,就会有新的对象来给不同的线程使用,妈妈再也不用担心并发问题了。
提起不可变类,你会想到什么,大部分程序员第一反应都是String,那你知道为什么要将String类设计成不可变吗?
这主要是出于常量池和hashCode的需要以及线程安全考量的,而原理也不外乎是提高效率和保障对象状态的稳定,因此,当我们调用 String 类的任何方法(比如说 trim()、substring()、toLowerCase())时,总会返回一个新的对象,而不影响之前的值。
虽然在Java教程中不可变类是一个小卡点,但我们只要知道它是什么,为什么,其实这个卡点我们也可以非常快速突破。
本文原创 文章来源:好学谷 转载请标明出处:http://www.haoxuegu.com/