Java值传递(基本数据类型和引用数据类型)和虚拟机内存作用
2017-08-01 20:22
447 查看
在Java类中方法传递参数时,根据传递的参数类型不同,在内存中的位置也是不同的。
形参为基本数据类型:
当传递基本数据类型时,jvm会在栈中开辟一个新的内存空间,存储传递过来的值,也就是重新复制一份这个值,然后再在方法中操作这个复制过来的值,对原来的值没有影响。
举个例子:
产生的结果如下图:
内存图解:
形参为引用数据类型时:
引用数据类型做为形参时,由于引用数据类型是存储在堆中,随后把在堆中的地址赋值给栈中的变量,因此当方法的参数是引用变量时,会在栈中开辟一个内存空间,存储的是引用数据类型在堆中的地址
例子如下:
控制台输出的结果:
内存图解:
方法中的传递,基本上是这样的描述。
下面为Java虚拟机内存的分部粗讲:Java的虚拟机共分为五大部分
1.虚拟机栈:这个就是们常说的堆栈,在上图中存储基本数据类型的值和引用数据类型地址的
2.堆:存放对象实例,即创建对象时,在堆中开辟内存保存对象实例
3.方法区:存放Java中的一些常量,静态变量,如果类中含有常量或者静态成员,则在开辟堆内存之前先把常量和
静态变量在方法区中存储好
4.程序计数器:为程序线程服务
5.本地方法栈:本地方法栈和虚拟机栈基本类似,只不过Java虚拟机栈执行的是Java代码(字节码),
本地方法栈中执行的是本地方法的服务。本地方法栈中也会抛出StackOverflowError和OutOfMemory异常。
形参为基本数据类型:
当传递基本数据类型时,jvm会在栈中开辟一个新的内存空间,存储传递过来的值,也就是重新复制一份这个值,然后再在方法中操作这个复制过来的值,对原来的值没有影响。
举个例子:
产生的结果如下图:
内存图解:
形参为引用数据类型时:
引用数据类型做为形参时,由于引用数据类型是存储在堆中,随后把在堆中的地址赋值给栈中的变量,因此当方法的参数是引用变量时,会在栈中开辟一个内存空间,存储的是引用数据类型在堆中的地址
例子如下:
控制台输出的结果:
内存图解:
方法中的传递,基本上是这样的描述。
下面为Java虚拟机内存的分部粗讲:Java的虚拟机共分为五大部分
1.虚拟机栈:这个就是们常说的堆栈,在上图中存储基本数据类型的值和引用数据类型地址的
2.堆:存放对象实例,即创建对象时,在堆中开辟内存保存对象实例
3.方法区:存放Java中的一些常量,静态变量,如果类中含有常量或者静态成员,则在开辟堆内存之前先把常量和
静态变量在方法区中存储好
4.程序计数器:为程序线程服务
5.本地方法栈:本地方法栈和虚拟机栈基本类似,只不过Java虚拟机栈执行的是Java代码(字节码),
本地方法栈中执行的是本地方法的服务。本地方法栈中也会抛出StackOverflowError和OutOfMemory异常。
相关文章推荐
- 基本数据类型和引用数据类型的内存传递的变化
- Java中的基本数据类型和引用数据类型的内存模型
- java中的基本数据类型和引用数据类型内存中的位置
- java中的基本数据类型和引用数据类型以及它们的存储方式堆内存和栈内存
- 第4章 变量、作用域和内存问题(1)基本类型和引用类型的值
- javascript基本类型和引用类型,作用域和内存问题
- 今日内容介绍 1、自定义类型的定义及使用 2、自定义类的内存图 3、ArrayList集合的基本功能 4、随机点名器案例及库存案例代码优化 ###01引用数据类型_类 * A: 数据类型
- JavaScript高级程序设计之变量、作用域和内存问题之基本类型和引用类型的值第4.1讲笔记
- 基本数据类型&&引用数据类型内存变化
- 通过Object.prototype.toString.call()--判断数据(基本、引用)类型
- Java知识(基本数据类型的传值和引用数据类型和arrays类)
- Java基本数据类型和引用数据类型
- java基本数据类型传递与引用传递区别详解
- Java中基本数据类型的存储方式和相关内存的处理方式(java程序员必读经典)
- 基本数据类型的包装类型作为参数传递,以及其他引用类型作为参数传递,以及List中值的交换的一些问题
- ECMAScript 变量可能包含两种不同数据类型的值:基本类型值和引用类型值。
- JavaScript中基本数据类型和引用数据类型的区别
- Java基本数据类型&引用类型总结
- JS中的基本数据类型和引用数据类型
- 结构体内存对齐以及基本数据类型夸平台大小