java版严重的问题,新鸟老鸟都进来看看吧
awfe 2003-11-26 10:55:12 曾经有一个帖子《对Java参数传递不懂的请进来!》里面给出一个地址http://www.csdn.net/Develop/read_article.asp?id=22025,里面介绍了关于传参的问题。很受初学者的欢迎。我没事也看了一下,一看大吃一惊。里面写道:
“因此,你只要按上面的方法去分析,就会发现String对象和基本类型一样,一般情况下作为参数传递,在方法内改变了值,而原对象是不会被改变的。”
这句话有明显的问题。java中的传参,基本类型是传递他的数值,而对象类型是传递他实例的内存地址,这个也是个数值。这也就是平常所说java是传值的。
上面那句“就会发现String对象和基本类型一样”所说的是什么意思呢,很难让人理解。我想作者的意思是想说明“在方法内改变了值,而原对象是不会被改变的”这个现象看起来是一样的。但是这样的说法非常不妥。这是我联想起来最近有很多人在给别人回帖的时候写道,“String和基本类型传参是一样的”这样的错误说法,估计其中有部分是受到那篇文章的误导。
“在方法内改变了值,而原对象是不会被改变的”并不是它传参的原因,而是他是“immutable”的原因。所以我觉得作者不应该在关于传参这个标题下谈论这点,如果非要谈论就一定要说清楚,否则会误导很多人的
我只是看了那帖子的回复,发现有很多人看过了,但是没有一个人提出问题,担心有许多无辜的初学者被误导了。所以在这里发这个帖子澄清一下,希望yuanmeng163 (今天我有空) 不要见怪,有问题请和我联系。
顺便说一句“String str = “Hello”; 等价于String str = new String(“Hello”);”这句话也有问题