值类型与引用类型
1.1 区别与联系
在网上看到一句形容值类型与引用类型的话“值类型是现金,引用类型是存折”,个人认为非常贴切。这句话指明了引用类型表示储存数据的地址,而值类型就是地址当中的数据。
具体区别及联系见下表:
值类型 | 引用类型 | |
---|---|---|
定义 | 直接存储数据 | 持有数据的引用 |
存储 | 栈(一声明就分配内存) | 堆(创建实例后才分配内存) |
例子 | 1.所有数字数据类型; 2.Boolean、Char 和 Date; 3.所有结构,即使其成员是引用类型; 4.枚举类型 |
1.string, class; 2.所有数组,即使其元素是值类型; |
equal用法 | 比较的是二者的引用地址而不是内部的值 | 比较的是二者的值 |
垃圾回收(GS) | 栈不归GC管,所以作用范围一过,立即回收空间 | 劳烦GC动手 |
除了以上不同之外,还有一个比较晦涩的不同,引用类型一般都具有继承性,但是值类型一般都是封装的,因此值类型不能作为其他任何类型的基类。虽说不懂也记录下来,因为笔面试会考。