一.基本数据类型和引用数据类型的区别

一、基本数据类型:

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]

          故能改变字符串值

猜你喜欢

转载自www.cnblogs.com/zjm1999/p/9696018.html