比如说一个person类;
person p=new person();
此时在栈空间和堆空间各开辟了一块内存;
变量p中存放的是他所指向的相应堆内存的地址,也就是说p的值是一个地址,可以求出;
但是如果想知道p本身所代表的栈内存的地址应该怎么求? java中没有引用传递,C++中有,谁来告诉我一下什么是引用传递?是不是方法中的形参引用的是p所代表的栈内存的地址?
person p=new person();
此时在栈空间和堆空间各开辟了一块内存;
变量p中存放的是他所指向的相应堆内存的地址,也就是说p的值是一个地址,可以求出;
但是如果想知道p本身所代表的栈内存的地址应该怎么求? java中没有引用传递,C++中有,谁来告诉我一下什么是引用传递?是不是方法中的形参引用的是p所代表的栈内存的地址?
一些内存方面的问题,初学java 还是不要过度关注了,坏处多于好处。
意思就是 传递的是对象的地址 ,我们去修改这个对象,实际上是修改的内存地址中的内容
内存地址中的内容变化,所有指向该内存地址的变量的值都相应改变~~~甚至可以简单的理解为:引用传递就是 给一个内存地址起了2个名字, 一个是参数的名字 ,一个就是传递进来的原来变量的名字~
引用的“值”的内容应该是代表了堆内存的地址看这个例子: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引用值相同的时候仅仅代表它们引用的是同一个对象,但它们本身已经是两个不同的引用了
因为方法形参中的引用已经只是实参的拷贝了