java中数据的传递形式
数据从A到B有两种方式传递(A=B)
一是传值,相当于A和B指的是两个东西,存储在不同位置的,但存储的内容相同,改变A的值对与B没有影响。
二是引用(传地址),相当于A和B指的是同一个东西,只是有A和B两个名字。不管是通过A对存储的内容修改还是通过B对内容的修改,都会同步改变。
这两种传递方式是由系统内部决定的。所以了解什么时候赋值的时候是值传递,什么时候是引用(传地址)是非常重要的。
数据类型
java中的数据类型分为基础类型和引用类型
基本类型有:
byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0
short:短整型,在内存中占16位,即2个字节,取值范围-32768~32717,默认值0
int:整型,用于存储整数,在内在中占32位,即4个字节,取值范围-2147483648~2147483647,默认值0
long:长整型,在内存中占64位,即8个字节-263~263-1,默认值0
float:浮点型,在内存中占32位,即4个字节,用于存储带小数点的数字(与double的区别在于float类型有效小数点只有6~7位),默认值0
double:双精度浮点型,用于存储带有小数点的数字,在内存中占64位,即8个字节,默认值0
char:字符型,用于存储单个字符,占16位,即2个字节,取值范围0~65535,默认值为空
boolean:布尔类型,占1个字节,用于判断真或假(仅有两个值,即true、false),默认值false
除此之外都是引用类型
内存分配
然后再来介绍java中内存的分配,java中内存分为内存栈和内存堆两种,基本类型是直接保存在内存栈中的,而引用类型则是保存该类型在内存堆中的地址在内存栈中。
可以这么理解,内存栈都是一条条的小纸条,纸条比较小,所以存储的内容就很有限,基本数据类型因为内容很少,最多也就8个字节,所以就直接写下纸条上了,而对于引用类型来说,引用类型可能有成千上万的字节,那么纸条就写不下了,只能把这些资料放在档案室(内存堆),纸条上写下它在档案室中的位置,需要的时候,就去档案室去找。
然后平常我们直接赋值的时候,就是改变内存栈的值(改变纸条上的内容),所以基本类型就是值传递,而引用类型就是传地址。