java参数的值传递

java参数的值传递
[url]http://www.an-ping.com/forum/blog/detail.asp?blog_id=2&content_id=127[/url]
在java中,只有“值传递“一种参数传递方式。
[b]1. 按值传递和按引用传递[/b]
定义按值传递和按引用传递
这两个术语是重要的。按值传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的一个副本。因此,如果函数修改了该参数,仅改变副本,而原始值保持不变。按引用传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的内存地址,而不是值的副本。因此,如果函数修改了该参数,调用代码中的原始值也随之改变。
[b]2. 对象(object)与引用(reference) [/b]
我们知道:
A a = new A();
产生一个A类型的对象,a是这个对象的的一个引用,即a指向heap中真正的对象,而a和其他基本数据类型 一起存放在stack中.也就是object通过reference操控,在底层的话,a更象一个指针.
[b]3.一个帮助理解的例子:[/b]

[code]public class PassTest {
float ptValue;

public void changeInt(int value) {
value = 55;
}

public void changeStr(String value) {
value = new String("different");
}

public void changeObjValue(PassTest ref) {
ref.ptValue = 99f;
}

public static void main(String args[]) {
String str;
int val;
PassTest pt = new PassTest();
val = 11;
pt.changeInt(val);
System.out.println("Int value is: " + val);
str = new String("Hello");
pt.changeStr(str);
System.out.println("Str value is: " + str);
pt.ptValue = 101f;
pt.changeObjValue(pt);
System.out.println("Current ptValue is: " + pt.ptValue);
}
}[/code]
这个程序最后输出的结果将是:

11

Hello

99f

对于int类型的参数11, 虽然改变了形参的值,但是实参却不改变,这同C语言中是一样的。
对于String 类型的变量 str,因为在java中String作为对象来处理,参考上面的分析,str是"hello"的一个引用(指针),按照值传递的说法value是str 的一个副件,因此也是一个引用。但是他经过value = new String ("different");被修改后value指向了一个新的对象。所以str所指的内容没有被改变。
pt 是主函数中创建的PassTest的对象,通过传递它,就可以完成地址的传递,子函数中,ref与主函数的pt指向的其实是一个内存单元,那么修改 ref中的ptValue的值,也就是修改pt中的ptValue的值,即使没有最后的数据返回,这个数据也是会改变的。
我们要记住,a只不过是对象的reference,而reference的复件与原来的reference指向的是同一个对象 我们对复件的操作,与对a的操作一样,最终还是对指向对象的操作,因此,java的参数,只有值传递.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值