Java中的可变类型和不可变类型
定义:
可变数据类型:当该数据类型对应的变量的值发生改变时,它对应的内存地址不发生改变,对于这种数据类型就称为可变数据类型。
不可变数据类型:当该数据类型对应的变量的值发生改变时,它对应的内存地址也发生改变,对于这种数据类型就称为可变数据类型。
可变数据类型样例:
public class Test {
public int num;
public static void main(String[] args) {
Test t = new Test();
t.num = 11;
Test t1 = t;
t1.num = 111;
System.out.println(t.num);
}
}
//这里输出的是t是111
不可变数据类型样例:
public class Test_1 {
public static void main(String[] args) {
int i = 0;
int i1 = i;
i1 = 10;
System.out.println(i);
}
}//这里输出的i是0
解释:
- 对于可变数据类型的样例中
t是Test类型(对象),t和t1是同一个地址,可以将t和t1理解成指针(地址),实际上就是t1->t->obj
,通过t1改变obj中num的值,也就 是改变了内存中对象的值,再通过t调用的时候,num就是改变之后的值。
- 对于不可变数据类型样例中
当i1=i
时,情况与对象时是这样子的i->0(地址)
,i1->0(地址)
,当i1
进行i1=10
时指向改变为i1->10
而i
不发生改变,所以调 用i
时值不发生改变。
不可变数据类型:
-
所有基本数据类型(boolean、char、byte、short、int、long、float、double)
-
所有基本数据类型的封装类(Boolean、Char、Byte、Short、Integer、Long、Float、Double)
-
String(字符串),Enum(枚举),LocalDate、LocalTime、LocalDateTime(时间)
-
其他:BigInteger、BigDecimal等
-
不可变对象类型再Java中被称为
Immutable Objects