频道栏目
首页 > 程序开发 > 软件开发 > Java > 正文
java值传递和引用传递在内存中是怎么分配的?
2018-05-09 13:47:18         来源:GoodIdea  
收藏   我要投稿

在以后的工作中,如果没有很好的掌握这两种传递方式,那么就会带了一些意想不到的问题.

如果要很好的掌握他们的,必须要对其内部的结构,也就是内存存储位置有一个比较清晰的印象

那么以后再写程序,不管遇到什么的程序,表现虽然不一样,但是内部结构(内存)的位置基本上

不会有太多的变化.好了.废话不说了:

第一种:值传递方式: 举个简单的程序

[java]view plaincopy

< class="alt">publicclassInitDataTest{

< class="alt">publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub

< class="alt">inta=5; intb;

< class="alt">b=a; b=6;

< class="alt">trace(a,b); }

< class="alt">staticvoidtrace(inta,intb){ System.out.println("a的值为:"+a+"\nb的值为"+b);

< class="alt">} }

trace(a,b);

}

static void trace(int a,int b){

System.out.println("a的值为:"+a+"\nb的值为"+b);

}

}

[结果如下]

a的值为:5

b的值为6

内存结构图如下:

\

上面的图对应的程序的执行顺序以及内存是怎么发生变化的.相信大家都能看的懂不.

第二种:引用传递 例子如下:

public class Number {

public static void main(String[] args) {

Test n1=new Test();

Test n2=new Test();

n1.i=9;

n2.i=47;

System.out.println("n1.1="+n1.i+"\n"+"n2.i="+n2.i);

n1=n2;

System.out.println("n1.1="+n1.i+"\n"+"n2.i="+n2.i);

n1.i=27;

System.out.println("n1.1="+n1.i+"\n"+"n2.i="+n2.i);

}

}

class Test{

int i;

}

内存变化图如下:

\
\

到此时堆中的没有引用的那块区域 等待垃圾回收器处理 此时他们2个指向了同一块内存空间.

输出结果大家应该能想到的:

n1.1=9n2.i=47

n1.1=47n2.i=47

以下是个人见解:

基本数据类型中变量值是直接存入栈中的,所以栈中的值只有操作当前变量名才能改变。

引用数据类型在栈中存的是地址,变量值在堆中,所以两个相同地址值的引用变量操作的是同一个变量值,改变一个变量的值时,另一个也跟着改变。

点击复制链接 与好友分享!回本站首页
上一篇:Appium+java的环境搭建教程
下一篇:Java中关于数据存储方式的介绍
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站