1.Java has several primitive types 基本数据类型,
such as:
– int (for integers like 5 and -200, but limited to the range ± 2^31, or roughly ± 2 billion)
– long (for larger integers up to ± 2^63)
– boolean (for true or false)
– double (for floating-point numbers, which represent a subset of the real numbers) – char (for single characters like 'A' and '$' )
2.Java also has object types 对象数据类型,
for example:
– String represents a sequence of characters.
– BigInteger represents an integer of arbitrary size
改变一个变量:将该变量指向另一个值得存储空间
改变一个变量的值:将该变量当前指向的值的存储空间写入一个新的值
2.不变性
(1).不变数据类型:一旦被创建,其值不能改变
(2).不变的引用类型:一旦确定其指向的对象,不能再被改变
exmple
final int n = 5;
final Person a = new Person(“Ross”);
变量n的值不能被改变
引用a不能被改变
3.可变类和不可变类(Mutable and Immutable Objects)
可变类:当你获得这个类的一个实例引用时,你可以改变这个实例的内容。
不可变类:当你获得这个类的一个实例引用时,你不可以改变这个实例的内容。不可变类的实例一但创建,其内在成员变量的值就不能被修改。
举个例子:String和StringBuilder,String是immutable的,每次对于String对象的修改都将产生一个新的String对象,而原来的对象保持不变,而StringBuilder是mutable,因为每次对于它的对象的修改都作用于该对象本身,并没有产生新的对象。4.Advantage of mutable types
使用 不可变类型,对其频繁修改会产生大量的临时拷贝(需要垃圾回收)
可变类型最少化拷贝以提高效率
使用可变数据类型,可获得更好的性能
5.Risks of mutable types
在声明这里的对象时,对象t和t1的值其实是一个地址,也可以看成一个指向堆内存中某个对象的指针。让t1=t时,实际上也是让t1指向t指向的对象,通过t1改变num的值,也就是改变了堆内存中的对象的值,通过t再调用时,num的值自然也是改变后的结果。
相对于可变类型 ,不可变类型更“安全”,在其他质量指标上表现更好
6.不可变引用
引用是不可变的,但指向 的值却可以是可变的
可变的引用,也可指向不可变的值
exmple
final StringBuilder sb = new StringBuilder("abc");
sb.append("d");
sb = new StringBuilder("e"); //编译阶段会出错
System.out.println(sb);//输出:abcd