堆栈

堆 heap

概念

  • 堆用来存储对象,栈里头的对象的引用指向堆内存对应的对象

栈 stack

概念

  • 栈用来存储基本数据类型的变量和对象的引用变量
  • 方法参数的变量也是存储在栈的

基本数据类型有:byte,short,int,long,float,double,boolean,char

数组类型是对象,所以对象的引用包括数组

区别

JVM 中堆和栈属于不同的内存区域,使用目的也不同。

参考

https://www.51dongshi.com/ebzdssahrvc.html

值传递与引用传递

概念

  • 值传递 :方法接收的是实参值的拷贝,会创建副本。
  • 引用传递 :方法接收的直接是实参所引用的对象在堆中的地址,不会创建副本,对形参的修改将影响到实参。

程序设计语言将实参传递给方法(或函数)的方式分为值传递与应用传递,很多程序设计语言(比如 C++、 Pascal)提供了两种参数传递的方式,不过在 Java 中只有值传递

实参(实际参数):用于传递给函数/方法的参数,必须有确定的值。
形参(形式参数):用于定义函数/方法,接收实参,不需要有确定的值。

示例

参考

https://github.com/Snailclimb/JavaGuide/blob/main/docs/java/basis/why-there-only-value-passing-in-java.md