基本数据类型引用传递参数和引用类型传递参数的区别

java中数据类型分两种:基本数据类型和引用数据类型
基本数据类型有:整型类型的数据(byte、short 、int 、long )浮点型、字符型、布尔型

byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0

short:短整型,在内存中占16位,即2个字节,取值范围-32768~32717,默认值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

引用数据类型(数组、类、接口类等):

Java语言本身不支持C++中的结构(struct)或联合(union)数据类型,它的复合数据类型一般都是通过类或接口进行构造,类提供了捆绑数据和方法的方式,同时可以针对程序外部进行信息隐藏。

基本数据类型引用传递参数和引用类型传递参数是有区别的(看一个例子):

public class arrayTest {

public static void main(String[] args) {
    int a=1;
    test(a);
    System.out.println(a);


}
static void test(int b)
{
    b=100;
}

}
这是一个基本数据类型int整型的传参,输出变量a的值发现a仍然是1,并没有发生任何改变;虽然在调用test函数的时候,执行了a=100,但是a的值确实没有改变

public class arrayTest {

public static void main(String[] args) {
    //引用数据类型传参
    int[] arr=new int[]{1,2,3};
    test(arr);
    System.out.println(Arrays.toString(arr));


}
static void test(int[] arr)
{
    arr[2]=100;
}

}

这是一个引用数据类型传参,在函数体内对arr[2]进行了重新赋值,在调用该函数之后重新输出数组,发现数组内的值也发生了改变,这跟基本数据类型的结果是有区别的

原因是什么呢

当基本数据类型作为传递参数的时候,传的就是参数的具体值,这里变量的值确实发生了改变,它是存储在栈里边的,出了函数体就销毁了;变量a跟变量b是两个完全不同的变量;而当引用数据类型传递参数的时候,传递的是对象的首地址,也就是又新建了一个栈内的对象,指向堆内的一块内存,形参变量和实参变量共享同一块堆区;

猜你喜欢

转载自blog.csdn.net/qq_39497607/article/details/81385051
今日推荐