先上代码:
class Demo
{
public static void main(String[] args)
{
int a = 10;
int b = 20;
System.out.println("a:"+a+",b:"+b);//输出: a:10,b:20
change(a,b);
System.out.println("a:"+a+",b:"+b);// 输出: a:10,b:20
int[] arr = {1,2,3,4,5};
change(arr);
System.out.println(arr[1]); //输出: 4
}
public static void change(int a,int b)
{
System.out.println("a:"+a+",b:"+b);// 输出: a:10,b:20
a = b; // a 20 b 20
b = a + b; //a 20 b 40
System.out.println("a:"+a+",b:"+b);// 输出: a:20,b:40
}
public static void change(int[] arr)
{
for(int x=0; x<arr.length; x++)
{
if(arr[x]%2==0)
{
arr[x]*=2;
}
}
}
}
语句执行结果是:
a:10,b:20
a:10,b:20
a:20,b:40
a:10,b:20
4
笔者开始很不能理解,两个方法都木有返回值,为什么数组内的值发生了改变,而传入a,b整型的变量却没有跟着方法内改变。
看到后面,才知道基本数据类型都是值类型,而数组为引用类型,说到底就是值类型与引用类型的差别
要理解引用类型与值类型的差别,还是要从内存的角度去理解,不然说什么也听不懂(经验之谈)
讲解:
值类型,他的数据是存在栈中的,就好比是放在篮子里的鸡蛋,你突然不想吃鸡蛋了,你就把篮子和鸡蛋扔掉了,鸡蛋就没有了,或者你买少了,你叫你对象再去买一个,但鸡蛋在你对象那里,不传给你,你就还是你篮子里鸡蛋数目。
而引用类型,则是你把鸡蛋存在超市的储物柜里,你有储物柜的钥匙,你不想要这些鸡蛋了,你就把钥匙扔掉了,但鸡蛋还是在储物柜里,只要别人有钥匙就可以去取,这时候,你叫你对象去帮你买鸡蛋,他只要放在储物柜里,你们两个都有钥匙,储物柜的鸡蛋改变了,拥有钥匙的人的鸡蛋数目都会变。
不知道这个比喻恰不恰当,但我就是这么理解的!OK!!嘻嘻 |
|