浏览 3435 次
|
锁定老贴子 主题:句柄与指针--讨论凤舞凰扬的问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2004-11-10
凤舞凰扬的原帖子实在太长了,在这里新开一个帖子讨论这个问题。
我认为,java并没有c++中指针、地址的概念,它只有句柄(handler)的概念。还以凤舞凰扬的两个方法为例: public void call(Test t) { Test t2 = new Test(); t2.setName("cba'); t.setName("abc"); t = t2 ; } public static void main(String[] arg) { Test obj = new Test(); call (obj) ; System.out.println("obj"+obj.getName()); } 总共构建了两个Test对象,假设称main方法构建的对象为“对象1”,call方法构建的对象为“对象2”, 在main方法中,变量obj获得了“对象1”的句柄, 在参数传递中,变量obj把这个句柄传递给变量t, 在call方法中,变量t首先改变了“对象1”的属性,然后变量t又获得了“对象2”的句柄(但obj仍然是“对象1”的句柄), call方法返回后,由于“对象2”失去了唯一的句柄,不可避免的进入垃圾收集器的视线。而obj仍然是“对象1”的句柄,由于“对象1”的属性已经被重新设置,所以我们可以看到打印出来的结果是“abc”。 所以我认为以下论断是没有问题的: “在Java中方法参数的传递,对象是传递引用,基本数据类型是传递值。” 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2004-11-10
晕啊,指针是c++实实在在存在的概念.而句柄呢,windows下才有的概念!!!
|
|
| 返回顶楼 | |
|
最后更新时间:2004-11-10
nihongye 写道 晕啊,指针是c++实实在在存在的概念.而句柄呢,windows下才有的概念!!!
呵呵,这叫“惟中文名论”。pointer就是“一个东西,它指向另一个东西”,handle就是“一个把手,抓着它就可以使用另一个东西”,干吗要跟C++和Windows扯上干系呢? |
|
| 返回顶楼 | |
|
最后更新时间:2004-11-10
干嘛又要引入一个“句柄”,在这里折腾?
一句话白了,Java里面的引用和C++里面的引用是不同的概念。 C++的引用变量初始化了以后,就不可以再引用其他变量了。 Java的引用变量初始化了以后,还可以再引用其他变量。 Java函数调用中传递对象时,当然是传引用。 |
|
| 返回顶楼 | |
|
最后更新时间:2004-11-10
<<Thinking In JAVA>>已经说的很清楚了
见: http://hongsoft.blogdriver.com/hongsoft/401063.html |
|
| 返回顶楼 | |
|
最后更新时间:2004-11-10
真服了你们,还要讨论这个问题啊。连我都忍不住了。既然讨论的是java,就不要跳开jvm撤到别的地方去了,就java论java,曹科长?曹队长说的很详细了,再不明白就买本ijm做做贡献吧。如果不想再深入,能理解tij就打住。如果有郑州的兄弟的话,省点时间一起去喝两口吧。我这段时间出差到郑州,感觉郑州人常喝的黑土地很不错。
|
|
| 返回顶楼 | |
|
最后更新时间:2004-11-12
拜托楼主,把我大名加在标题中,我岂不是成为大家笑话的对象了. 留点颜面咯
上面的问题是我在四五月份在做试题的时候无意中发现的,并且,发现绝大多数程序员都或多或少地犯了这样的问题. 它本是一个很简单的问题, 可以讲就是java的语法就是这样的,所以我觉得没有必要再做文章炒来炒去了. |
|
| 返回顶楼 | |
|
最后更新时间:2004-11-18
虽说挨了不少砖,可俺心服口服。在说了,人在江湖飘,哪能不挨砖。
|
|
| 返回顶楼 | |












