锁定老帖子 主题:传值,传引用?String参数的困惑
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-06-19
public class MainTest { public static void main(String[] args) throws Exception { String str="aaaaaaaa"; change(str); System.out.println(str); } public static void change(String str){ str="bbbbbbb"; } } 输出的是“bbbbbbb”吗?显然不是的,输出的是"aaaaaaaa",有点困惑? 我们知道java中基本类型是传值,引用类型传引用 而这里的change方法参数是String,当然是传引用。但是我们的测试说明了好像并不是那么回事情。 原因就在于String的是用Char数组,所以这里的怪现象就好理解了。这里的change方法参数实际上是传的char,而char是基本类型,当然就是传值了 也不知道理解得对不对,大家讨论下吧 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-06-19
论坛上有相关的文章介绍过,里面讲的很详细。。
http://zangweiren.iteye.com string 的内部是用char[] 来实现的。。 |
|
返回顶楼 | |
发表时间:2009-06-19
因为java中是值传递,String是对象类型。
|
|
返回顶楼 | |
发表时间:2009-06-19
引用本身是值传递,函数里面不能改变外边的引用
|
|
返回顶楼 | |
发表时间:2009-06-19
方法是不能改变参数对象的引用的
String对象和基本类型一样 值发生变化引用也变化 所以方法内部相当于new 了新的String 原来的的值是不会变的 |
|
返回顶楼 | |
发表时间:2009-06-19
确实传引用,
但change方法里的引用并非main函数里的引用 在调用change方法时又创建了一个指向“aaaaaaaa”的引用 只是两个引用指向了同一个对象 所以在方法里把引用指向另一个对象 对main函数里的引用是没有影响的 |
|
返回顶楼 | |
发表时间:2009-06-20
值传递,change方法传的是str的一个副本
|
|
返回顶楼 | |
发表时间:2009-06-21
传址(引用)的副本。
|
|
返回顶楼 | |
发表时间:2009-06-21
java本质上来说传的都是value,没有address。对象传址是因为,复制的是指向对象的那个指针。
|
|
返回顶楼 | |
发表时间:2009-06-21
引用传递,传给方法的是引用的拷贝
|
|
返回顶楼 | |