Java定义了8个简单的数据类型其余均为引用数据类型:
1、简单数据类型:
1、字节型(byte),2、短整型(short),3、整型(int),4、长整型(long),5、字符型(char),6、浮点型(float),7、双精度型(double),8、布尔型(boolean).
2、引用数据类型:
例如 :String
变量的初始化以及所占空间:
java中成员变量(而局部变量没有默认值故必须人为初始化,为其赋初值)如果没有初始化则系统会给其一默认值。各数据类型的默认值以及所占空间大小如下表:
数据类型在内存中的分配
(其中堆栈stack与堆(或内存堆 heap)可参考《Java变量以及内存分配》或访问:http://www.cnblogs.com/zhxhdean/archive/2011/03/26/1996468.html)
由上已知在Java中的引用类型,是指除了基本的变量类型之外的所有类型。而无论是基本数据类型还是引用类型,所有的类型都会在内存中被分配一定的存储空间,(形参在使用的时候也会分配存储空间,方法调用完成之后,这块存储空间自动消失),
1、基本的变量类型只有一块存储空间(分配在堆栈stack 中);
2、而引用类型有两块存储空间(一块在堆栈stack 中,一块在堆(或内存堆 heap) 中):
堆(heap)内存用来存放由 new创建的对象和数组。 由Java虚拟机的自动垃圾回收器来管理。
在堆(heap)中产生了一个数组或对象后,还会在栈(堆栈stack )中定义一个特殊的变量(即引用),让栈中这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量。(也可以理解为对象的引用变量就表示堆栈stack 中一段内存且该内存中存储的是对象在堆(或内存堆 heap) 内存中地址)。
方法形参的值传递(引用)是指形参和传进来的参数指向同一个值的内存(heap)中;(注意理解这句话!)
什么是引用?
简单的说,引用其实就像是一个对象的名字或者别名 (alias),一个对象在堆(heap)内存中会请求一块空间来保存数据,根据对象的大小,它可能需要占用的空间大小也不等。访问对象的时候,我们不会直接是访问对象在堆(heap)内存中的数据,而是通过引用去访问。引用也是一种数据类型,引用与基本数据类型一样也存储在堆栈stack中。我们可以把它想象为类似 C 语言中指针的东西,它指示了对象在堆(heap)内存中的地址——只不过我们不能够观察到这个地址究竟是什么。
如果我们定义了不止一个引用指向同一个对象,那么这些引用是不相同的,因为引用也是一种数据类型,需要一定的堆栈stack内存空间来保存。但是它们的值是相同的,都指示同一个对象在堆(heap)内存的中位置。