博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数组复制:关于java中引用传递的一个例子
阅读量:4552 次
发布时间:2019-06-08

本文共 660 字,大约阅读时间需要 2 分钟。

  首先,我们看下面两段程序:

(1).
1 int[] a = {1, 2, 3, 4};2 int[] b = new int[4];3 b = a;
(2).
1 int[] a = {1, 2, 3, 4};2 int[] b = new int[4];3 int i = 0;4 for(int num:a){5     b[i++] = num;6 }
  赋值之后,数组b的值都是
{1, 2, 3, 4},但是这两种方法是有实质区别的。
  首先,数组的初始化过程是这样的:对于
int[] a;首先定义一个数组名
a,然后将
a这个变量进栈,当然这里没有对
a进行初始化,所以
a是一个空引用。对于
int[] a = {1, 2, 3, 4};首先也是定义一个变量
a并将
a进栈,然后在堆区创建一个对象
{1, 2, 3, 4},最后建立
a对对象
{1, 2, 3, 4}的引用。
  其次,值传递和引用传递,第一种方法,实际上是改变了
a的引用对象,
a
b引用同一个对象了,这样也会产生一个不良后果,
b原来引用的对象不再被引用,也就产生了一块内存垃圾。如下图所示:
  
  第二种方法,是对
b引用的内存区域的赋值,并未改变
b的引用对象。
  
  
复制数组切勿使用引用传递的方法,不但会产生内存垃圾,不适当的操作也会改变原来的数组。

转载于:https://www.cnblogs.com/fingerdancing/archive/2013/04/14/javaRef.html

你可能感兴趣的文章
万恶的KPI、新兴的OKR及让人纠结的程序员考核
查看>>
【Win10+eclipse+MinGW+QT安装教程】已有eclipse环境下配置QT插件出错详解
查看>>
设计模式-单例,静态代理,工厂
查看>>
Socket programming in C on Linux | tutorial
查看>>
[LeetCode] House Robber II
查看>>
java日期格式Date,Timestamp存入数据库
查看>>
【nodejs】让nodejs像后端mvc框架(asp.net mvc)一样处理请求--目录(8/8 完结)
查看>>
MD5加密
查看>>
bzoj1592 Making the Grade
查看>>
bzoj3236:[AHOI2013]作业
查看>>
StarRTC , AndroidThings , 树莓派小车,公网环境,视频遥控(三)手机端
查看>>
python *args **kwargs
查看>>
JPA + SpringData 操作数据库原来可以这么简单 ---- 深入了解 JPA - 2
查看>>
使用 Hadoop 进行语料处理(面试题)
查看>>
webmagic学习之路-1:采集安居客列表页测试
查看>>
android bluetooth UUID蓝牙查询表
查看>>
node的consoidate的插件统一
查看>>
POj2387——Til the Cows Come Home——————【最短路】
查看>>
EPLAN标题页及图框的设计
查看>>
坐标下降法(coordinate descent method)求解LASSO的推导
查看>>