java 传值 还是 传对象

看了http://www.cndw.com/tech/program/2006042962403.asp上的这篇文章,有点小体会,不知道对不对,先记下来。
我们知道,java中的实例变量中存储的是一种特殊的数据结构(对象的引用,通过它能访问它所指向的对象,但它不是那个对象,而仅相当于那个对象的别名),看下面的两个例子:
/* 例 2 */
/**
* @(#) Test.java
* @author fancy
*/
public class Test {
public static void main(String[] args) {
StringBuffer a = new StringBuffer("Hello");
StringBuffer b = a;
b.append(", World");
System.out.println("a is " + a);
}
}
===============================================================
/* 例 3 */
/**
* @(#) Test.java
* @author fancy
*/
public class Test {
public static void test(StringBuffer str) {
str.append(", World!");
}
public static void main(String[] args) {
StringBuffer string = new StringBuffer("Hello");
test(string);
System.out.println(string);
}
}
它们的结果是一样的,main中的对象改变了。而下面的例子
/* 例 4 */
/**
* @(#) Test.java
* @author fancy
*/
public class Test {
public static void test(String str) {
str = "World";
}
public static void main(String[] args) {
String string = "Hello";
test(string);
System.out.println(string);
}
}
结果显然,main中的对象并没有改变,这是因为在传参的过程中,相当于执行了
“形参”=“实参”;
这样一个表达式,即例3、例4中调用test方法时,相当于执行了一次str=string,也就是test方法中的str成了main中的对象的一个别名,但是在例4中,这个别名又指向了另外一个对象,所以没有对main中的对象造成影响,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值