一.基本数据类型和引用数据类型的区别
一、基本数据类型:
byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0
short:短整型,在内存中占16位,即2个字节,取值范围-32768~32767,默认值0
int:整型,用于存储整数,在内在中占32位,即4个字节,取值范围-2147483648~2147483647,默认值0
long:长整型,在内存中占64位,即8个字节-2^63~2^63-1,默认值0L
float:浮点型,在内存中占32位,即4个字节,用于存储带小数点的数字(与double的区别在于float类型有效小数点只有6~7位),默认值0
double:双精度浮点型,用于存储带有小数点的数字,在内存中占64位,即8个字节,默认值0
char:字符型,用于存储单个字符,占16位,即2个字节,取值范围0~65535,默认值为空
boolean:布尔类型,占1个字节,用于判断真或假(仅有两个值,即true、false),默认值false
二.类、接口类型、数组类型、枚举类型、注解类型。
区别:
基本数据类型在被创建时,在栈上给其划分一块内存,将数值直接存储在栈上。
引用数据类型在被创建时,首先要在栈上给其引用(句柄)分配一块内存,而对象的具体信息都存储在堆内存上,然后由栈上面的引用指向堆中对象的地址。
三.String作为参数传递
1.基本数据类型的值传递,不改变其值
2.引用数据类型的值传递,改变其值
3.String类虽然是引用数据类型,但它当做参数传递时和基本数据类型是一样的
分析:当change方法执行完弹栈时,s(0x0022)值被当做垃圾回收消失,再输出s是0x0011地址的String类型值
四.StringButter作为参数传递
分析:StringButter传递的是引用对象sb的地址值,两个sb均在栈内存中,而都指向堆内存同一个new StringButter()[0x0011]
故能改变字符串值