
“嗨,阿米戈!”
“嗨,比拉博!”
“今天 Bilaabo 将向您介绍可变对象和不可变对象。
“创建后可以更改的对象称为可变对象。”
“创建后不能更改的对象称为不可变的。”
“是什么决定了我能否改变一个对象?”
“新类的作者可以使该类的对象不可变。例如,如果将所有 setter 设为私有,则对象将只有一个构造函数和 getter;这意味着它在创建后将无法更改”
“那有什么意义呢?”
“不可变对象有许多有用的属性,但我将重点介绍几乎所有不可变对象共有的两个属性:”
1)不可变对象比可变对象更容易实现。
2) 不可变对象可以跨多个线程同时自由使用。
“当开发人员决定编写一个不可变类时,他通常会同时制作该类的可变和不可变版本。”
“但是写两个类而不是一个类有什么意义呢?”
“有时,当对象的不可变版本比可变版本更简单/更快时,这是值得的。因此,他们制作了两个版本。有点像 ArrayList 和 LinkedList:两者都是列表,但一个针对特定目的进行了优化,第二个给其他人。”
“这已经更有意义了。”
“还有纯粹不可变的类,它们没有可变版本。”
“但是,如果我需要更改其中一个对象中的某些内容怎么办?您实际上可以用不可变对象做什么?”
“通常,不可变类包含各种方法,这些方法就像它们改变对象一样,但这些方法只是创建一个新对象并返回它,而不是改变对象本身。”
“这里有些例子:”
Java代码 | 描述 |
---|---|
|
结果,s 包含字符串 «london» 并且 s2 包含 «LONDON» |
|
这是真正发生的事情: Integer i = new Integer(1); 整数 j = i; j = new Integer(i.getInt()+1); |
“String 类是一个不可变类。所有 String 对象都是不可变的,但这并不妨碍我们使用它们。例如,String 类的toUpperCase () 方法将 String 转换为大写(即替换所有小写字母" _ _
“Integer 类也是一个不可变类。所有 Integer 对象都是不可变的。每次我们更改 Integer 对象时,我们实际上是在创建一个新对象。”
“真有趣!万岁,Bilaabo。”
“我万岁!Bilaabo 万岁!”
GO TO FULL VERSION