java传递地址_java 值传递及地址传递(引用传递)

本文通过实例深入解析了Java中值传递与引用传递的区别。对于基本数据类型,Java采用值传递,而对于对象则是传递引用的副本。在示例代码中,尽管对象引用被复制,但原始引用并未受到影响,因此修改副本不会影响原始对象的值。文章强调了Java只有值传递,没有类似C++的指针传递机制。通过对StringBuilder对象的操作,展示了如何通过引用传递改变对象的内部状态,从而影响输出结果。
摘要由CSDN通过智能技术生成

一直来觉得对值传递和地址传递了解的很清楚,刚才在开源中国上看到一篇帖子介绍了java中的值传递和地址传递,看完后感受颇深。下边总结下以便更容易理解。

按照以前的理解,java中基本数据类型是值传递,对象是地址(引用)传递。给大家看个例子:

public class ObjectTrans {

public static void main(String[] args) {

String name = "123";

SChange(name);

System.out.println(name);

}

public static void SChange (String str) {

str = "234";

}

}

大家思考下,这个例子输出的结果应该是123呢还是234呢?结果是123。why?一句话表达:对象也是值传递,只是把这个对象的引用copy了一份。

其实java本来就是值传递,没有c++那样的指针传递,分步分析下上边的代码:

1、name = "123"

2、调用SChange  str 和 name 共同指向 “123”(拷贝name的引用赋给str)

3、str 重新赋值并指向“234”

4、name指向不变还是“123”

下边看另外一段代码:

public class ObjectTrans {

public static void main(String[] args) {

StringBuilder name = new StringBuilder("123");

SChange(name);

System.out.println(name);

}

public static void SChange (StringBuilder str) {

//str = "234";

str.append("234");

}

}

那么这段代码输出的结果应该是什么呢?答案是123234,why?同样分步分析:

1、name = "123"

2、调用SChange  str 和 name 共同指向 “123”(拷贝name的引用赋给str)

3、改变所指向对象的值"123"+"234"

4、引用没变只是值变了,所以结果为123234

如果不明白请留言,自己好好分析下。。。请记住一句话:java只有值传递。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值