java基础易错点———方法对象参数和基本类型参数

易错点:

在我们学习基础的过程中,基本上所有的教程都会告诉你,方法内参数的修改和方法外的对象不相关,修改了方法内的参数并不会修改到方法外变量。

例如:

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编程思想这本书,这个书可以在你学完框架入职后进行进阶基础使用

上一篇:达梦数据库性能优化-SQL优化案例分析


下一篇:2022-1-7-Git