<span>Jav不可变对象</span>

不可变对象

不可变对象(Immutable Object):对象一旦被创建后,对象所有的状态及属性在其生命周期内不会发生任何变化。

  • 一旦创建,这个对象(状态/值)不能被更改了。
  • 其内在成员变量的值就不能修改了。
  • 典型的不可变对象
    1.八个基本型别的包装类的对象
    2.String,BigInteger等的对象
public class ImmutableObject {
    private int value;
     
    public ImmutableObject(int value) {
        this.value = value;
    }
     
    public int getValue() {
        return this.value;
    }
}

由于ImmutableObject不提供任何setter方法,并且成员变量value是基本数据类型,getter方法返回的是value的拷贝,所以一旦ImmutableObject实例被创建后,该实例的状态无法再进行更改,因此该类具备不可变性。

不可变对象之间也是传指针(引用)。

比如我们平时用的最多的String:

public class Test {
 
    public static void main(String[] args) {
        String str = "I love java";
        String str1 = str;
 
        System.out.println("after replace str:" + str.replace("java", "Java"));
        System.out.println("after replace str1:" + str1);
    }
}

输出结果:

从输出结果可以看出,在对str进行了字符串替换替换之后,str1指向的字符串对象仍然没有发生变化。

如何创建不可变对象

  • 所有的属性都是final和private的。
  • 不提供setter方法。
  • 类是final的,或者所有的方法都是final。

不可变对象优点:

  • 只读,线程安全
  • 并发读,提高性能
  • 可以重复使用

缺点:

  • 制造垃圾,浪费空间.
全部评论

相关推荐

04-30 21:35
已编辑
长安大学 C++
晓沐咕咕咕:评论区没被女朋友好好对待过的计小将可真多。觉得可惜可以理解,毕竟一线大厂sp。但是骂楼主糊涂的大可不必,说什么会被社会毒打更是丢人。女朋友体制内生活有保障,读研女朋友还供着,都准备订婚了人家两情相悦,二线本地以后两口子日子美滋滋,哪轮到你一个一线城市房子都买不起的996清高计小将在这说人家傻😅
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务