论坛首页 Java版

句柄与指针--讨论凤舞凰扬的问题

浏览 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中方法参数的传递,对象是传递引用,基本数据类型是传递值。”
   
最后更新时间:2004-11-10
晕啊,指针是c++实实在在存在的概念.而句柄呢,windows下才有的概念!!!
   
0 请登录后投票
最后更新时间:2004-11-10
nihongye 写道
晕啊,指针是c++实实在在存在的概念.而句柄呢,windows下才有的概念!!!


呵呵,这叫“惟中文名论”。pointer就是“一个东西,它指向另一个东西”,handle就是“一个把手,抓着它就可以使用另一个东西”,干吗要跟C++和Windows扯上干系呢?
   
0 请登录后投票
最后更新时间:2004-11-10
干嘛又要引入一个“句柄”,在这里折腾?

一句话白了,Java里面的引用和C++里面的引用是不同的概念。

C++的引用变量初始化了以后,就不可以再引用其他变量了。

Java的引用变量初始化了以后,还可以再引用其他变量。


Java函数调用中传递对象时,当然是传引用。
   
0 请登录后投票
最后更新时间:2004-11-10
<<Thinking In JAVA>>已经说的很清楚了
见:
http://hongsoft.blogdriver.com/hongsoft/401063.html
   
0 请登录后投票
最后更新时间:2004-11-10
真服了你们,还要讨论这个问题啊。连我都忍不住了。既然讨论的是java,就不要跳开jvm撤到别的地方去了,就java论java,曹科长?曹队长说的很详细了,再不明白就买本ijm做做贡献吧。如果不想再深入,能理解tij就打住。如果有郑州的兄弟的话,省点时间一起去喝两口吧。我这段时间出差到郑州,感觉郑州人常喝的黑土地很不错。
   
0 请登录后投票
最后更新时间:2004-11-12
拜托楼主,把我大名加在标题中,我岂不是成为大家笑话的对象了. 留点颜面咯
   上面的问题是我在四五月份在做试题的时候无意中发现的,并且,发现绝大多数程序员都或多或少地犯了这样的问题.
     它本是一个很简单的问题, 可以讲就是java的语法就是这样的,所以我觉得没有必要再做文章炒来炒去了.
   
0 请登录后投票
最后更新时间:2004-11-18
虽说挨了不少砖,可俺心服口服。在说了,人在江湖飘,哪能不挨砖。
   
0 请登录后投票
论坛首页 Java版

跳转论坛:
JavaEye推荐