java中的“值传递”和“引用传递”

本文详细解释了Java中函数参数的传递方式,包括值传递与引用传递的区别,并通过实例代码展示了不同类型参数在函数调用过程中的行为差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 和大多数流行的编程语言一样,函数体的传入参数分为“值传递”和“引用传递”两种。

(1)“值传递”传入的参数是java语言中定义的基本数据类型(如int,char,double等)

(2)“引用传递”传入的参数在java则是对象的一个"引用",这个"引用"的概念同C语言中的指针引用是一样的。

那么两者之间到底有何异同呢?

       “值传递”传入的参数在函数体内部变成了局部变量,这个局部变量是输入参数的一个拷贝,所有的函数体内部的操作都是针对这个拷贝的操作,函数执行结束后,这个局部变量也就完成了它的使命,它影响不到作为输入参数的变量。而“引用传递”则有很大的不同,当函数体内部对输入变量改变时,实质上就是在对这个对象的直接操作,就会影响到作为输入参数的变量。这就是两者最重要的区别

        通过下面的两组代码的对比就更能说明这一点

import java.util.*;

public class HashtableAdd{
    
public static void main(String[] args){
        Hashtable ht 
= new Hashtable();
        StringBuffer sb 
= new StringBuffer();
        sb.append(
"abc,");
        ht.put(
"1",sb);     
        sb.append(
"def,");
        ht.put(
"2",sb);
        sb.append(
"mno,");
        ht.put(
"3",sb);
        sb.append(
"xyz.");
        ht.put(
"4",sb);
        Enumeration it 
= ht.elements();
        
while(it.hasMoreElements()){
            System.out.println(it.nextElement());
        }

    }

}



import java.util.*;

public class HashtableAdd2{
    
public static void main(String[] args){
        Hashtable ht 
= new Hashtable();
        
int sb=0;
        ht.put(
"1",sb);     
        sb
=1;
        ht.put(
"2",sb);
        sb
=2;
        ht.put(
"3",sb);
        sb
=3;
        ht.put(
"4",sb);
        Enumeration it 
= ht.elements();
        
while(it.hasMoreElements()){
            System.out.println(it.nextElement());
        }

    }

}

 

初看第一组代码,觉得结果应该是

abc, 
abc,def,
abc,def,mno,
abc,def,mno,xyz.

但实际上是把对象时作为入口参数传给函数,实质上是传递了对象的引用,向Hashtable传递StringBuffer对象也是只传递了这个StringBuffer对象的引用!每一次向Hashtable表中put一次StringBuffer,并没有生成新的StringBuffer对象,只是在Hashtable表中又放入了一个指向同一StringBuffer对象的引用而已。

两组代码的结果应该是

abc,def,mno,xyz.

abc,def,mno,xyz.

abc,def,mno,xyz.

abc,def,mno,xyz.

3

2

1

0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值