易错点:
在我们学习基础的过程中,基本上所有的教程都会告诉你,方法内参数的修改和方法外的对象不相关,修改了方法内的参数并不会修改到方法外变量。
例如:
public void test(){
int test=0;
test1(test);
System.out.println("test="+test);
}
public void test1(int test){
test=1;
System.out.println("test1="+test); }
打印结果中,test并不相同,与教程所教相同 (注意这里的变量是基本类型,并非基本类型的包装类)
然而
public class TestObject{
private String action;
getter+setter 重写toString方法
}
public void test(){
TestObject testObject=new TestObject();
test1(testObject);
System.out.println(testObject);
}
public void test1(TestObject testObject){
testObject.setAction("陈皮");
System.out.println(testObject); }
发现打印的结果testObject对象是一模一样的! 不重写toString方法,他们的内存地址也是一模一样的!
这是为什么呢?
首先,方法内的参数,他的存储区在在方法栈中,方法外的那个变量则是放入堆内存中,两者的内存地址不同,自然不是同一个东西,可以理解成进击的巨人一样,墙里面的人和墙外面的人是不一样的,外面是巨人,里面的人没有变成巨人。
当方法内参数声明的是引用变量时,所声明的变量(该变量实际上是在方法中存储的是内存地址值)是放在方法的栈中,该变量所指向的对象是放在堆类存中的。
类中的引用类型,其声明的变量仍然会存储一个内存地址值,该内存地址值指向所引用的对象。
所以你可以发现他们的内存地址时一模一样的,也就是说方法外和方法内的引用类型用的都是一个内存地址,自然他的修改就会同步了。
小结:
很多东西都是很细节的,需要你去发现,这个是我刚入职时才发现区别,所以不要焦虑,很多东西都是入职才能发现精彩哦!
最后,安利一本java编程思想这本书,这个书可以在你学完框架入职后进行进阶基础使用