开篇先来曝答案,在 Java 语言中,本质只有值传递,而无引用传递,解释和证明详见正文。
说到值传递和引用传递我们不得不提到两个概念:值类型和引用类型。
1.值类型
通俗意义上来说,所谓的值类型指的就是 Java 中的 8 大基础数据类型:
- 整数型:byte、int、short、long
- 浮点型:float、double
- 字符类型:char
- 布尔类型:boolean
从 JVM 层面来讲:所谓的值类型指的是在赋值时,直接在栈中(Java 虚拟机栈)生成值的类型,如下图所示:
2.引用类型
引用类型是指除值类型之外的数据类型,比如:
- 类
- 接口
- 数组
- 字符串
- 包装类(Integer、Double...)
从 JVM 的层面来讲,所谓的引用类型是指,在初始化时将引用生成栈上,而值生成在堆上的这些数据类型,如下图所示:
PS:关于包装类为什么是引用类型?我们后面的文章会单独讲,记得关注:Java中文社群