看一下上面的图,方法里面的变量永远在堆里面,main方法和DayDreaming方法是两个方法,所以得有两个空间,所以两个空间里面的变量是独立的
虽然程序调用了方法 DayDreaming,但是调用这个方法只是把 salary、cars、houses 这3个变量的值拷贝一份传进去而已,在这个方法里面怎么去变化都不会影响到外面的变量的值,只有传引用进去才会改变值
Java中本质上只有值传递,题中属于下面这种情况:
1.基本类型:形参的改变对实际参数没有影响,在栈中保存的是两个值,原本的值和DayDreaming方法中的值
方法调用改变的只是DayDreaming开辟的内存中的参数,DayDreaming方法内的值在调用完之后就被虚拟机回收了,所以不会对原本的值产生改变。
2.2.引用类型(String除外):形参的改变直接影响实际参数,在堆中操作。
Java只有值传递。
1.如果形参为基本数据类型,方法体中形参就是实参的副本,形参的值改变不会影响实参的值。
2.如果形参为引用类型(String除外),形参是实参内存地址的拷贝,形参和实参指向同一个对象的内存地址。
1)8大基础类型,这里int传的是值,所以不会改变原来的
2)如果传引用类型,则会改变,引用类型如:对象类型
这属于传递值的问题。
1.基本类型:形参的改变对实际参数没有影响,方法内部变化不会影响到外部
.2.引用类型:形参的改变直接影响实际参数,方法内部变化外部也会随之改变。 比如传递一个对象或者数组。