JAVA中变量的存放位置
一、方法内部
方法内部设置的变量叫局部变量,它的变量名和值都保存在栈中,而这个栈是跟随调用方法是一起生成的方法栈。栈会随着方法的结束而释放,而其中的变量也会随着销毁
二、方法外部
方法内部设置的变量叫全局变量,保存在堆中。
变量分为两种:基本类型,引用类型。
基本类型:变量名和值都会一起保存在堆或栈中。
引用类型:它保存的是内存地址值,该地址会指向生成的对象,其是保存在堆中的。
型参和实参
形参 :就是形式参数,用于定义方法的时候使用的参数,接收调用者传递过来的参数。 形参只有在方法被调用的时候,虚拟机才会分配内存单元,在方法调用结束之后便会释放所分配的内存单元
实参 :就是实际参数,用于调用时传递给方法的参数。实参在传递给别的方法之前是要被预先赋值的
传递的参数一样有基本和引用俩种,型参会复制实参的值,方法内修改型参
public class Test {
public static class A{
int i = 1;
}
public static void main(String[] args) {
int i = 1;
update(i);
System.out.println(i);
A a = new A();
update1(a);
System.out.println(a.i);
}
public static void update(int i) {
i++;
}
public static void update1(A a) {
a.i++;
}
}
输出结果为1 和 2
这个结果表示:方法内修改int类型的值不会改变原先的数据,而修改A类的数据后,原先的数据也改变了。
总结:这跟变量存放的地址有很大的关系,基本类型它会直接复制值,i->i1,修改i1,不会影响i。但引用类型它复制的时存储地址,他根据存储地址找到对象进行修改,其他所有引用这个地址的对象,取值时后对取到新值。
八大基本类型: byte
, short
, int
, long
, char
, float
, double
, boolean
;
引用类型包括: 类类型
, 接口类型
和 数组。
其中某些特殊的引用类型不符合这个结果,
String, Integer, Float, Double, Short, Byte, Long, Character等基本包装类型类,虽然它本质还是引用传递,但是你可以认为他是值传递