比如说一个person类;
person p=new person();
此时在栈空间和堆空间各开辟了一块内存;
变量p中存放的是他所指向的相应堆内存的地址,也就是说p的值是一个地址,可以求出;
但是如果想知道p本身所代表的栈内存的地址应该怎么求? java中没有引用传递,C++中有,谁来告诉我一下什么是引用传递?是不是方法中的形参引用的是p所代表的栈内存的地址?

解决方案 »

  1.   

    java没有引用传递这是James Gosling那帮人的设计选择。
    一些内存方面的问题,初学java 还是不要过度关注了,坏处多于好处。
      

  2.   

    Java所谓的引用传递  可以简单的理解为 传递的是内存地址 
    意思就是 传递的是对象的地址 ,我们去修改这个对象,实际上是修改的内存地址中的内容
    内存地址中的内容变化,所有指向该内存地址的变量的值都相应改变~~~甚至可以简单的理解为:引用传递就是 给一个内存地址起了2个名字, 一个是参数的名字 ,一个就是传递进来的原来变量的名字~
      

  3.   

    java开发最好不要想着c++的指针 java中的引用都是通过对象来实现 把指封装起来了 开发者不需要考虑指针的移向问题!
      

  4.   

    java中是通过 “值” 来拷贝或传递引用
    引用的“值”的内容应该是代表了堆内存的地址看这个例子:public class Test {    public static void main(String[] args) throws InterruptedException {
            MyObject fp = new MyObject("1");
            System.out.println(fp);
            foo(fp);
            
            System.out.println(fp.name);
            System.out.println(fp);
        }
        
        public static void foo(MyObject ap) {
         System.out.println(ap);
         ap = new MyObject("2");
        
         System.out.println(ap.name);
         System.out.println(ap);
        }
        
    }class MyObject {
    int x = 1;
    String name;

    public MyObject(String name) {
    this.name = name;
    }
    }
    MyObject@a90653
    MyObject@a90653
    2
    MyObject@de6ced
    1
    MyObject@a90653引用值相同的时候仅仅代表它们引用的是同一个对象,但它们本身已经是两个不同的引用了
    因为方法形参中的引用已经只是实参的拷贝了
      

  5.   

    java中的引用本质就是指针  不过你要求地址干什么?   
      

  6.   

    虽说java都是值传递,但是某些时候理解为引用传递更好理解,尤其是初学者