ie传递给系统调用的数据区域太小_Java 的值传递与引用传递

1. 形参与实参[1]

  • 实参:方法被调用时传入的实际值,它在方法被调用前就已经被初始化,并且在方法被调用时传入。
  • 形参:方法被调用时传入的参数,如:func(int a)中的a,只有在func被调用期间a才有意义,也就是会被分配内存空间;在方法func执行完成后,a就会被销毁释放空间,也就是不存在了。

栗如:

public 

int a=10; 中的 a 在被调用之前就已经创建并初始化,在调用func方法时,他被当做参数传入,所以这个a是实参。
而func(int a)中的a只有在func被调用时它的生命周期才开始,而在func调用结束之后,它也随之被JVM释放掉,所以这个a是形参。

2 Java 中的数据类型

所谓数据类型,是编程语言中对内存的一种抽象表达方式。程序是由代码文件和静态资源组成:程序被运行前,这些代码存在在硬盘里;程序开始运行,这些代码会被转成计算机能识别的内容放到内存中被执行。因此:

数据类型实质上是用来定义编程语言中相同类型的数据的存储形式,也就是决定了如何将代表这些值的 bit 存储到计算机的内存中。

所以,数据在内存中的存储,是根据数据类型来划定存储形式和存储位置的。

  1. 基本类型:编程语言中内置的最小粒度的数据类型。它包括4大类8种数据类型:
  • 4种整数类型:byte、short、int、long
  • 2种浮点数类型:float、double
  • 1种字符类型:char
  • 1种布尔类型:boolean

2. 引用类型:引用也叫句柄。引用类型,是编程语言中定义的在句柄中存放实际内容所在地址的一种数据形式。它主要包括:

  • 接口
  • 数组

有了数据类型,JVM对程序数据的管理就规范化了,不同的数据类型,其存储形式和位置是不同的,想知道JVM是怎么存储各种类型的数据,就要先了解JVM的内存划分以及各部分的职能。

3 JVM的内存划分及职能

Java语言本身是不能操作内存的,它的一切都是交给JVM来管理和控制的,因此Java内存区域的划分也就是JVM的区域划分,在说JVM的内存划分之前,我们先来看一下Java程序的执行过程,如下图:

f6f5948f0290ed16a2c7998ebc23f8c9.png

4 值传递与引用传递

  1. 对基本类型的数据进行操作:由于原始内容和副本都是存储实际值,并且是在不同的栈区,因此形参的操作,不影响原始内容。
  2. 对引用类型的数据进行操作,分两种情况:
  • 一种是形参和实参保持指向同一个对象地址,则形参的操作,会影响实参指向的对象的内容。
  • 一种是形参被改动指向新的对象地址(如重新赋值引用),则形参的操作,不会影响实参指向的对象的内容。
值传递:在方法被调用时,实参通过形参把它的内容副本传入方法内部,此时形参接收到的内容是实参值的一个拷贝,因此在方法内对形参的任何操作,都仅仅是对这个副本的操作,不影响原始值的内容。 引用传递:”引用”也就是指向真实内容的地址值。在方法调用时,实参的地址通过方法调用被传递给相应的形参,在方法体内,形参和实参指向同一个内存地址,对形参的操作会影响真实内容。 所以:在Java中不存在纯粹的引用传递。 (个人感觉C语言中基于指针的引用传递,才是纯粹的引用传递;Java形参赋值新的对象,对引用方是不可见的,当然,这种约束也避免了一些复杂的地址指向问题)

代码验证:

/**

输出

changed: name=lily, age=0 
changed person:name=lucy, age=12
tranfered person:name=mini, age=12

参考

  1. ^https://zhuanlan.zhihu.com/p/55548266
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值