什么是可变/不可变对象,它们有什么用? - 1

“嗨,阿米戈!”

“嗨,比拉博!”

“今天 Bilaabo 将向您介绍可变对象和不可变对象。

“创建后可以更改的对象称为可变对象。”

“创建后不能更改的对象称为不可变的。”

“是什么决定了我能否改变一个对象?”

“新类的作者可以使该类的对象不可变。例如,如果将所有 setter 设为私有,则对象将只有一个构造函数和 getter;这意味着它在创建后将无法更改”

“那有什么意义呢?”

“不可变对象有许多有用的属性,但我将重点介绍几乎所有不可变对象共有的两个属性:”

1)不可变对象比可变对象更容易实现。

2) 不可变对象可以跨多个线程同时自由使用。

“当开发人员决定编写一个不可变类时,他通常会同时制作该类的可变和不可变版本。”

“但是写两个类而不是一个类有什么意义呢?”

“有时,当对象的不可变版本比可变版本更简单/更快时,这是值得的。因此,他们制作了两个版本。有点像 ArrayList 和 LinkedList:两者都是列表,但一个针对特定目的进行了优化,第二个给其他人。”

“这已经更有意义了。”

“还有纯粹不可变的类,它们没有可变版本。”

“但是,如果我需要更改其中一个对象中的某些内容怎么办?您实际上可以用不可变对象做什么?”

“通常,不可变类包含各种方法,这些方法就像它们改变对象一样,但这些方法只是创建一个新对象并返回它,而不是改变对象本身。”

“这里有些例子:”

Java代码 描述
String s = "london";
String s2 = s.toUpperCase();
结果,s 包含字符串 «london» 并且 s2 包含 «LONDON»
Integer i = 1;
Integer j = i;
j++;
这是真正发生的事情:
Integer i = new Integer(1);
整数 j = i;
j = new Integer(i.getInt()+1);

“String 类是一个不可变类。所有 String 对象都是不可变的,但这并不妨碍我们使用它们。例如,String 类toUpperCase () 方法将 String 转换为大写(即替换所有小写字母" _ _

“Integer 类也是一个不可变类。所有 Integer 对象都是不可变的。每次我们更改 Integer 对象时,我们实际上是在创建一个新对象。”

“真有趣!万岁,Bilaabo。”

“我万岁!Bilaabo 万岁!”