Java值传递(基本数据类型和引用数据类型)和虚拟机内存作用

原创 2017年08月01日 20:22:14

在Java类中方法传递参数时,根据传递的参数类型不同,在内存中的位置也是不同的。


形参为基本数据类型:

当传递基本数据类型时,jvm会在栈中开辟一个新的内存空间,存储传递过来的值,也就是重新复制一份这个值,然后再在方法中操作这个复制过来的值,对原来的值没有影响。

举个例子:


产生的结果如下图:


内存图解:



形参为引用数据类型时:

引用数据类型做为形参时,由于引用数据类型是存储在堆中,随后把在堆中的地址赋值给栈中的变量,因此当方法的参数是引用变量时,会在栈中开辟一个内存空间,存储的是引用数据类型在堆中的地址

例子如下:


控制台输出的结果:


内存图解:




方法中的传递,基本上是这样的描述。


下面为Java虚拟机内存的分部粗讲:Java的虚拟机共分为五大部分

1.虚拟机栈:这个就是们常说的堆栈,在上图中存储基本数据类型的值和引用数据类型地址的

2.堆:存放对象实例,即创建对象时,在堆中开辟内存保存对象实例

3.方法区:存放Java中的一些常量,静态变量,如果类中含有常量或者静态成员,则在开辟堆内存之前先把常量和

         静态变量在方法区中存储好

4.程序计数器:为程序线程服务

5.本地方法栈:本地方法栈和虚拟机栈基本类似,只不过Java虚拟机栈执行的是Java代码(字节码),

                     本地方法栈中执行的是本地方法的服务。本地方法栈中也会抛出StackOverflowError和OutOfMemory异常。

Java中的Final关键字,区分基本数据类型与引用类型,值传递与引用传递

Final可以声明成员变量、方法、类以及本地变量。一旦你将引用声明作final,你将不能改变这个引用了。对于基本数据类型声明为Final后其值无法再次改变,对于引用类型,可以改变改引用的内容,但是无法...

java 中的this和基本数据类型的值传递

public class C{ private static int p; public static void main(String[] args){ // 创建一个空参的对象 C c...

Java基本数据类型

  • 2017年06月16日 22:19
  • 1010B
  • 下载

java基本数据类型传递与引用传递区别详解

Java的值传递和引用传递在面试中一般都会都被涉及到,今天我们就来聊聊这个问题,首先我们必须认识到这个问题一般是相对函数而言的,也就是java中的方法参数,那么我们先来回顾一下在程序设计语言中有关参数...

JAVA的基本数据类型

  • 2012年10月14日 10:50
  • 223KB
  • 下载

java基本数据类型传递与引用传递区别详解

Java的值传递和引用传递在面试中一般都会都被涉及到,今天我们就来聊聊这个问题,首先我们必须认识到这个问题一般是相对函数而言的,也就是java中的方法参数,那么我们先来回顾一下在程序设计语言中有关参数...
  • zwfmu
  • zwfmu
  • 2017年04月26日 14:24
  • 162

java 的基本数据类型

  • 2011年12月09日 11:43
  • 794B
  • 下载

Java之基本数据类型 Sizeof 大小

  • 2012年03月01日 15:38
  • 5KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java值传递(基本数据类型和引用数据类型)和虚拟机内存作用
举报原因:
原因补充:

(最多只允许输入30个字)