一、不可变数据类型和可变数据类型的区别

(1)不可变数据类型 :我理解是这类数据类型的值如果发生了变化,则变量的地址也就发生了变化

(2)可变数据类型:这类数据类型,如果值发生了变化,指向该值的变量地址并没有变

二、举例:

String&StringBuilder

String是一个不可变数据类型

public class Demo {
    public static void main(String[] args) {
        String s1 = "a";
        System.out.println(s1);
        System.out.println(s1.hashCode());
        s1 = "ab";
        System.out.println(s1);
        System.out.println(s1.hashCode());

    }
}

a
97
ab
3105

我们发现值变了以后,变量的地址也变了

java方法中可变参数 java可变类型和不可变类型_数据类型

 StringBuilder是可变数据类型

public class Demo {
    public static void main(String[] args) {

        StringBuilder sb = new StringBuilder("a");
        System.out.println(sb);
        System.out.println(sb.hashCode());
        sb.append("b");
        System.out.println(sb);
        System.out.println(sb.hashCode());

    }
}

 输出结果:

a
295530567
ab
295530567

 我们发现,值变了以后,变量的地址并没有变

java方法中可变参数 java可变类型和不可变类型_数据类型_02

 因此

不可变数据类型:对其修改会产生大量的临时拷贝(需要垃圾回收)
可变数据类型:最少化拷贝以提高效率,可以共享数据