目录
一、基本概念
Java的数据类型主要有基本数据类型和对象数据类型两种
二、mutable和immutable的区别
不变对象(immutable):一旦被创建,始终指向同一个值/引用
可变对象(mutable) :拥有方法可以修改自己的值/引用
如果要修改一个对象的值的话,immutable对象会另外新建一个值然后指向它,mutable对象会直接用新的值替换原来的值。通俗来讲就是immuta对象不会改变原来的值,而mutable对象会改变。下面来看个例子。
public static void main(String[] args) {
//String是一个immutable类型
String s = "a";
s = s.concat("b");
System.out.println("immutable类型");
System.out.println("t变化之前s的值为" + s);
String t = s;
t = t + "c";
System.out.println("t变化之后t的值为" + t);
System.out.println("t变化之后s的值为" + s);
//StringBuilder是mutable类型
StringBuilder sb = new StringBuilder("a");
sb.append("b");
System.out.println("mutable类型");
System.out.println("tb变化之前sb的值为" + sb);
StringBuilder tb = sb;
tb.append("c");
System.out.println("tb变化之后tb的值为" + tb);
System.out.println("tb变化之后sb的值为" + sb);
}
其结果为
用snapshot diagram表示如下

我们可以发现
对immutable对象的值( 例子中的t )进行改变时,会另外建立一个值,不会改变原来值,这就很安全
而mutable对象的值( 例子中的tb )进行改变时,会直接改变原来值。
三、总结
在我们编程序时,尽量避免使用mutable对象,这样可以避免用户改变我们原来的值,从而提高我们程序的安全性。