知优码

您现在的位置是:首页 > 开源项目 > 项目经验

项目经验

java中immutable的含义是什么

2021-01-11项目经验
java中immutable的含义是什么

一、概述

我认为对于Java新手来说,这非常令人困惑。

  1. 有人可以澄清什么是不变的吗?
  2. 为什么是String一成不变的?
  3. 不可变对象的优缺点是什么?
  4. 为什么诸如StringBuilderString之类的可变对象(而不是String)更受欢迎?

一个很好的例子(在Java中)将不胜感激。

二、详解

不可变是指一旦对象的构造函数完成执行,该实例将无法更改。

这很有用,因为这意味着您可以传递对对象的引用,而不必担心其他人会更改其内容。尤其是在处理并发时,永不更改的对象没有锁定问题

例如

class Foo
{
     private final String myvar;

     public Foo(final String initialValue)
     {
         this.myvar = initialValue;
     }

     public String getValue()
     {
         return this.myvar;
     }
}

Foo不必担心调用方getValue()可能会更改字符串中的文本。

如果您想象与相似的类Foo,但是成员带有StringBuilder而不是String,则可以看到的调用者getValue()将能够更改实例StringBuilder属性Foo

还要注意您可能会发现的各种不变性:基本上,您可以拥有其接口是不可变的对象,但是在幕后是实际的可变私有状态(因此不能在线程之间安全共享)。