当前位置:  技术问答>java相关

一道scjp题,关于传值和传引用

    来源: 互联网  发布时间:2015-04-19

    本文导语:  What is the output of the following code?  1. public class Note {  2. public static void main(String args[]) {  3. String name[] = {"Killer","Miller"};  4. String name0 = "Killer";  5. String name1 = "Miller";  6. swap(name0,name1);  7. System.o...

What is the output of the following code? 

1. public class Note { 

2. public static void main(String args[]) { 
3. String name[] = {"Killer","Miller"}; 
4. String name0 = "Killer"; 
5. String name1 = "Miller"; 
6. swap(name0,name1); 
7. System.out.println(name0 + "," + name1); 
8. swap(name); 
9. System.out.println(name[0] + "," + name[1]); 
10. } 

11. public static void swap(String name[]) { 
12. String temp; 
13. temp=name[0]; 
14. name[0]=name[1]; 
15. name[1]=temp; 
16. } 

17. public static void swap(String name0,String name1) { 
18. String temp; 
19. temp=name0; 
20. name0=name1; 
21. name1=temp; 
22. } 
23. } // end of Class Note 

answer is : Miller,Killer followed by Killer,Miller (调试是这个答案)
我觉得是  killer,miller,killer,miller
string 不是对象吗?
对象在方法里是传引用的,为什么String没有被交换呢?
改成String name0=new String("killer") 还是这个答案,不理解!

|
to javalearner()
“对象的引用在作为参数传递给方法的时候,它只是简单的传值,也就是说copy了一份给方法(这种情况和c++中一样),所以在swap中,两值交换不影响实际name0和name1。而数组确实传的是引用,故你改变的是引用,而不是它的值。”
“对象传的是引用没错,但是底层机制在将引用传给method的时候,传递的是value,不然你怎么解释传了引用(对象地址或句柄)本身,而在修改了引用后,原来的value并没有发生任何变化?你可以自己调试一下,不要老是引用别人的话,那样对你一点好处都没有。”
我上面的解释都是针对这两段话的,你后面的话我太长了我也没有仔细看。
我想说,为了你这句话,我特地找了那个例子来试试的,xhh(霹雳游侠)说的确实是对的。
再看看你自己吧,第一次说传值,第二次说传引用,且在解释不通的时候,得出了“对象传的是引用没错,但是底层机制在将引用传给method的时候,传递的是value”的结论,这就是你对底层理解的结果么?还是你对底层理解了但你不会表达?我倒是很想问问你这种“底层机制”到底是什么,你又深究出什么了?不过,你既然想沉默了,那我也不说废话了。
P.S:指针的概念你说的很对,你一定要把引用说成“强安全性的指针”也对,因为你了解C,但如果对于一个从来没有学过C的人或是学的不好的人,你和他这样说,或许会有点困扰。我学的不好,所以我不想困扰。

|
to Hiraku:好啦,我们已经背离了初衷了,我没有强调对象在传递给method()时时pass-by-value,这是我没做好的一点,我承认,可是我说传值和传引用都是有前提的,千万别断章取义,你可能以为我c学的好,其实不是,我直接学的就是c++和OO,面向过程的编程恐怕我就是学的汇编了(其实用汇编也可以实现初步的数据封装等初级OO),所以我从来不提c,对不熟悉的事物我从来不敢乱说。
我一开始正是因为霹雳先生没有说明白和正确我才出来解释的,请你理解,谢谢。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 一道送分的问题
  • 一道考验基础的JAVA语法题
  • 问个AIX题库的一道题,感觉答案应该是A啊
  • 关于构造函数的一道题
  • 初中计算机老师给我们出过一道题,那时候印象很深
  • 一道基础英语填空题(Java)
  • 一道题,select what & why?
  • 一道关于操作系统的题
  • 问一道算法题
  • 一道习题
  • 一道小程序有问题?请教!
  • 关于操作系统的一道题目(关于临时文件)
  • 这是南京大学的一道操作系统考研题....
  • 一道简单的Unix下shell编程题
  • 请问一道题,关于文件访问,在线等
  • 请教一道程序作业,暴简单
  • 求助:一道简单的shell编程题目
  • 一道操作系统的死锁题目
  • 问一道关于操作系统的题目
  • 今天金山系统测试的一道笔试题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3