1. 值类型
值类型数据也就是基本数据类型,四类八种:
1.1 逻辑型:boolean
1.2 字符型:char
1.3 整型:byte、short、int、long
1.4 浮点型:float、double
值类型变量的内容是数据本身,例:a = 5,则a的内容是5,5存放在栈中
所以,值类型的数据是存放在栈中
2. 引用类型
除了值类型,其他都是引用类型:数组、类、字符串、接口
引用类型变量的内容是数据地址,例:String str = "abc",则str的内容是"abc"的地址,而"abc"存放在堆中,
所以,引用类型的数据是存放在堆中,变量内容(即地址)存放在栈中
变量内容存放在栈中
函数调用中,参数传入都是将实参的内容拷贝一份给形参
3. 值传递
值类型变量的内容数据本身,所以拷贝一份给形参,形参改变后,不影响原数据(修改的拷贝的数据)
4. 引用传递
引用类型变量的内容是数据的地址,拷贝一份给形参后,形参将地址内容修改,实参地址指向的数据也改变(形参和实参指向相同的地址)
注:String类型是无法在原内存地址修改内容,在Java API中有这么句话:Strings are constant; their values cannot be changed after they are created. 在上例2中,修改str为:str="123";内部过程为:
在堆区再开辟一块空间并赋值"123"
在将"123"所在地址空间传给str
若无变量引用"abc",则将"abc"所在地址空间回收
5. 垃圾回收机制
栈中的空间:随着方法结束自动释放
堆中的空间:当一个对象不被任何变量引用时,自动释放该对象空间
参考:https://www.cnblogs.com/cycanfly/p/5230119.html
参考:https://blog.csdn.net/qq_22408539/article/details/82945990