论坛首页 入门技术论坛

传值,传引用?String参数的困惑

浏览 11840 次
该帖已经被评为新手帖
作者 正文
   发表时间: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是基本类型,当然就是传值了

也不知道理解得对不对,大家讨论下吧
   发表时间:2009-06-19  
论坛上有相关的文章介绍过,里面讲的很详细。。
http://zangweiren.iteye.com

string 的内部是用char[] 来实现的。。
0 请登录后投票
   发表时间:2009-06-19  
因为java中是值传递,String是对象类型。
0 请登录后投票
   发表时间:2009-06-19  
引用本身是值传递,函数里面不能改变外边的引用
0 请登录后投票
   发表时间:2009-06-19  
方法是不能改变参数对象的引用的

String对象和基本类型一样

值发生变化引用也变化

所以方法内部相当于new 了新的String

原来的的值是不会变的
0 请登录后投票
   发表时间:2009-06-19  
确实传引用,
但change方法里的引用并非main函数里的引用
在调用change方法时又创建了一个指向“aaaaaaaa”的引用
只是两个引用指向了同一个对象

所以在方法里把引用指向另一个对象
对main函数里的引用是没有影响的

0 请登录后投票
   发表时间:2009-06-20  
值传递,change方法传的是str的一个副本
0 请登录后投票
   发表时间:2009-06-21  
传址(引用)的副本。
0 请登录后投票
   发表时间:2009-06-21  
      java本质上来说传的都是value,没有address。对象传址是因为,复制的是指向对象的那个指针。
0 请登录后投票
   发表时间:2009-06-21  
引用传递,传给方法的是引用的拷贝
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics