首先我们来看一段代码:
public class Demo01 {
public static void main(String[] args) {
AAA a = new AAA();
a.num = 30;
fun(a);
System.out.println(a.num);
}
public static void fun(AAA temp){
temp.num = 100;
}
}
class AAA{
int num = 10;
}
public class Demo02 {
public static void main(String[] args) {
String str = "aaa";
fun(str);
System.out.println(str);
}
public static void fun(String temp){
temp = "bbb";
}
}
根据第一个Demo产生的原因,第二个例子结果是错的,why?
想要解决这个问题就要明白:值传递和引用传递。
明白值传递和引用传递在内存保存方式,
JVM中内存简略分为两类,栈内存和堆内存。
分清楚:哪些是值,哪些是引用?
值:八种基本数据类型,
引用:数据,类,接口(特殊的String,一些包装类)
不同的数据类型,保存的方式不同?
基本数据类型,变量名和值保存在栈中。
引用数据类型,对应的引用保存在栈中,对象的值保存在堆中。
总结:在值传递过程中,传递的是值本身。
在引用传递过程中,传递的是地址。