软件构造笔记——Mutability and Immutability

本文探讨了Java中不变性和可变性的概念,包括不可变类型如String和可变类型如StringBuilder的特点及应用。阐述了final关键字在确保不可变性中的作用,并对比分析了String与StringBuilder在字符串拼接时的性能差异。

Mutability and Immutability

1.1 Immutability(不变性)

  • 不变性是一种主要的设计原则,包括:
    • Immutable types(不变数据类型):不变数据类型创建完后,值不可修改。
    • Immutable references(不变引用):一旦指定引用位置,不可再次指定。
  • final关键字对不可变类型提供了静态检查的支持:
    • A final class declaration means it cannot be inherited.(final关键字修饰的类不能被继承)
    • A final variable means it always contains the same value/reference but cannot be changed. (final关键字修饰的变量,如果为基本类型,则该变量的值不能改变;如果是引用类型,则该引用的地址不能修改,但是这个引用指向的对象里面的内容可以改变)
    • A final method means it cannot be overridden by subclasses.(被final修饰的方法不能被子类重写)

1.2 Mutable type and Immutable type

  • String与StringBuilder

    • String是不可变类型,如果想要在已经创建的String型字符串后添加内容,则必须重新创建一个新的String对象(即String类没有修改其内容的方法)。如下:
    	String s = "a";
    	s = s.concat("b");	
    

    Snapshot图

    • StringBuilder是可变类型,可以通过调用方法修改其内容。如下:
    	StringBuilder sb = new StringBuilder("a");
    	sb.append("b");
    

    Snapshot图

    • 可变类型的优点:

      • 可以减少临时的拷贝

        例如,当我们想要连接n个字符时,

        String s = "";
        for (int i = 0; i < n; i++) {
        s = s + i;
        }
        

        使用String将进行许多次拷贝,第一个字符"0"将被拷贝n次,第二个字符拷贝n-1次…所以该操作的时间复杂度为O(n2)O(n^2)O(n2)

        StringBuilder sb = new StirngBuilder();
        for (int i = 0; i < n; i++) {
            sb.append(String.valueOf(i));
        }
        String s = sb.toString();
        

        使用StringBuilder可以减少过程中的拷贝。

      • 便于共享对变量的操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值