栈区 | |
---|---|
键 | 值 |
a | 135121 |
b | 135122 |
c | 1500 |
堆区 | |
---|---|
键 | 地址 |
c | 1500 |
name | “zhangsan” |
age | 20 |
常量池 | |
---|---|
值 | 地址 |
10 | 135121 |
“hello” | 135122 |
/ | / |
系统内存中可理解分为:栈区,堆区和常量池,栈区的基本数据类型的值,在被引用时会产生一个副本,此副本的值被改变时不会改变原来的值,但如果是对象,它在栈区的值是指向堆区对应数据的地址,当此对象被引用时,其被引用的是地址,不是值,一旦改变对象里的内容,实质改变的就是堆区里的内容,与基本数据类型有明显区别。如上图:a和b被引用时产生的会是副本,但c是对象,其保存的是指向堆区的c的地址,改变的值会是其对象c的值。
总结一下:如果方法中传入的是基本数据类型,那么原变量的值是不会发生改
变的,如果方法中传入的是引用数据类型(即类类型),那么传入方法中,如
果对对象的相关属性进行了修改,那么原对象的相关属性也会发生改变。