基本数据类型,对象数据类型
java 中可以将基本数据类型封装为对象,虽然可以自动进行转换,但是会降低效率,所以尽量少用这种方式。
静态类型检查和动态类型检查
静态类型:在编译时需要知道所有变量的类型,编译器可以推断所有表达式的类型。
动态类型:在运行时进行检查。
静态类型检查: 针对类型,也就是与变量特定值无关的错误,具体检查内容有函数调用形式、函数名称。
动态类型检查:针对由特定值引起的错误,具体检查内容有非法参数、超出范围的索引值、调用空对象的方法。
可变和不可变
改变一个变量:对变量赋值是在改变变量的指向,指向不同的值。
改变变量的值:改变可变变量的内容时,是在改变变量内部内容的引用。
在程序的编写过程中,为了保证程序的安全性,常常用不可变性,其中不变数据类型创建完后,值不可修改;不变引用,一旦指定引用位置,不可再次指定。
保持不可变的一类重要方法是使用final关键字:Final关键字对不可变引用提供了静态检查的支持。利用final来声明方法的参数和局部变量,有利于代码理解和编译器的静态检查。
可变和不可变的区别:当仅有一个引用时,二者的使用区别不大,但当有多个引用时,二者的区别很大。如下图:
左边为不可变类型,右边为可变类型,如果在编写程序过程中使用了不可变类型,可能在无意中修改了某个可变类型的值,这种改变并不容易发现,可能会造成后续的错误。所以虽然可变类型使用起来非常方便,为了代码的安全我们也应该减少它的使用。
Snapshot diagram
Primitive values:
Object values:
不可变类型使用双圆圈表示:
可变类型使用单圆圈:
final通常表示为一个双箭头:
使用双箭头后,id的值不再允许改变。
注:指向可变值的不可变引用指引用不可变,值可变。
指向不可变值的可变引用指值不可变,引用可变。