当某个函数f()返回类型为class A;A f(){
return new A();
}和
A f(){
A temp = new A();
return temp;
}这两种写法应该是有区别的吧,第二种返回的是个引用,那么第一种在执行return new A()时除了在heap上新建一个对象外,是不是在stack上隐示的建了一个指向A的引用,然后return的是引用??不知自己的理解对不对,望指教解惑。

解决方案 »

  1.   

    应该都是返回引用吧,一般用return this
      

  2.   

    另外还想请教下,在throw出异常时,throw出的是不是也是引用,问题是那个引用到底store在那里呢??如果是在stack的话,那它的生命周期是多少,是不是return回来就没了,以及在throw下是不是被catch就没了
      

  3.   

    throw是一个对像啊!生命周期?应该是当他可以被GC回收的时候,他就跷辫子了
      

  4.   

    throw new Exception()

    Exception temp = new Exception();
    throw temp;
    有何区别,这问题跟return一样,到底是对象还是对象的引用,如果是引用的话,它应该是隐示的创建在stack中吧,那么这个引用的生命周期是多少,注意:不是指这个引用所指的对象!!
      

  5.   

    所有函数返回和异常抛出的都不是对象本身,而是对象地址(或者叫“引用”)。只要有变量指向它,它就不会被回收。所以,在JAVA不存在像C++中的“不能返回指向局部变量的引用或指针”的问题,只要你在使用它,它就在那里。
      

  6.   

    java和c的不同处:java有堆,但没有栈。所以lz描述的stack....    ^_^
      

  7.   

    ExceptionTest et = new Exception();
    throw et 发生异常时throw会直接抛向et,
      

  8.   

    java真的没有栈吗?!这个问题一定要弄清楚,否则会误人子弟的。
      

  9.   

    都是new ,应该没太大区别吧,都在内存建了个对象啊
      

  10.   

    ->在stack上隐示的建了一个指向A的引用
    恩,我也是这么理解的。
    方法1只是在代码里省略了写对象指向的引用名
    2个方法原理应该一样,唯一不同的是,方法1的引用名为匿名
      

  11.   

    java有堆内存,也有栈内存。两个函数都是返回的stack上的引用。