先了解一下基本的概念:
1、对象和引用:
1.1、对象和引用的概念?
* 对象:目前在使用new运算符在堆内存中开辟的内存空间称为对象。
* 引用:是一个变量,不一定是局部变量,还可能是成员变量。引用保存了内存地址,指向了堆内存当中的对象。
* 所有访问实例相关的数据,都需要通过“引用.”的方式访问,因为只有通过引用才能找到对象。
* 只有一个空的引用,访问对象的实例相关的数据会出现空指针异常。
class Student{
Computer com; //com是一个引用【实例变量】
public static void doSome(){
Computer cc; //cc是一个引用【局部变量】
}
}
1.2、参数的传递?
主要研究和学习的是方法在调用的时候,涉及到参数传递的问题,到底是怎么传递数据的呢?
值传递。
int i = 10;
int j = i; //i传递给j,实际上只是将i变量中保存的10传递给j了,j实际上是一块全新的内存空间。
User u = 0x1234;
User u2 = u; //u传递给u2,实际上是将0x1234这个值赋值给u2了,u和u2实际上是两个不同的局部变量,
//但是它们这两个变量指向堆内存中同一个java对象。
Test01.class
public class Test01 {
public static void main(String[] args) {
int i = 10;
add(i); // add方法调用的时候,给add方法传递了一个变量i,到底传的是什么?
System.out.println("main ———>" + i); // 10
}
public static void add(int i){
i++;
System.out.println("add ———>" +i); // 11
}
}
Java虚拟环境(JVM)内存分析图