方法的参数传递

文章详细阐述了Java中基本数据类型和引用数据类型的传递方式,值传递不改变原始变量值,而引用传递可以影响对象的内部状态。通过案例分析了StringBuffer、String和数组在方法调用中的行为差异,展示了Java内存分配的影响。
摘要由CSDN通过智能技术生成

基本数据类型

基本数据类型:
整型:int
字节型:byte
长整型:long
短整型:short
单精度浮点型:float
双精度浮点型:double
字符型:char
布尔型:boolean

基本数据类型采用值传递,特点是传递的是值的拷贝,传递完后两者就没有关系了,方法内和方法外的值互不相干。

引用数据类型

引用数据类型:
引用数据类型建立在基本数据类型的基础上,除八种基本数据类型以外的数据类型都属于引用数据类型,包括数组、类和接口。引用数据类型是由用户自定义,用来限制其他数据的类型。

引用数据类型采用引用传递,指的是在方法调用时,传递的参数是按引用进行传递,其传递的内容为引用的地址,也就是变量所对应的内存空间的地址,传递的是地址的拷贝。也就是说,对于一个参数传递,存在的情况为两个地址指向同一个内存空间。

二、内存分配示意图

基本数据类型

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

引用数据类型

在这里插入图片描述
引用类型传递的内容为引用的地址
在这里插入图片描述

案例

public class ParameterPassing {
    public static void main(String args[]) {
        double st1;
        StringBuffer sb1, sb2;
        String sb3;
        char s[] = {'a', 'p', 'p', 'l', 'e'};
        st1 = 3.5;
        sb1 = new StringBuffer("apples");
        sb2 = new StringBuffer("pears");
        sb3 = new String("pear");
        modify(val, sb1, sb2, sb3, s);
        System.out.println(val);
        System.out.println(sb1);
        System.out.println(sb2);
        System.out.println(sb3);
        System.out.println(s);
    }

    public static void modify(double a, StringBuffer r1,
                              StringBuffer r2, String r3, char s[]) {
        a = 6.8;
        r1.append(" taste good");
        r2 = null;
        r3 = "banana";
        s[2] = 'R';
    }
}

执行结果:
3.5
apples taste good
pears
pear
apRle

解释:

  1. st1是基本数据类型,值拷贝的两者直接互不影响。所以modify方法内对a的操作不影响主方法的val的值。
  2. sb1为StringBuffer型,不属于基本类型,因此是引用传递。r1.append()修改了r1地址对应的内存空间的值,因此sb1的值改变了。
  3. sb2同样是StringBuffer型,属于引用传递。但r2=null是修改的r2的地址的值而不是r2地址指向的内存空间的值,因此sb2指向的还是原来指向的内存空间,且内存空间的值未被改变。
  4. sb3为String类型,属于引用传递。但是String类型是一个特殊的类,在方法内改变String的值并不能改变主方法中的String的值,r3=“banana"是创建了一个banana字符串然后让方法内的变量r3指向"banana”,但方法内的r3和主方法中的r3不是同一个变量,因此String仍然是pear。
  5. 数组为引用传递,且s[2]=‘R’,确实修改的是内存空间的值,因此char数组的值被改变。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值