java中的堆和栈


堆;

堆是用来存放的new创建的对象和数组,每一个对象都指向一个新的内存。

栈:

栈是用来存放基本类型变量和对象的引用变量存放的地方。里面存放的数据可以共享,但是如果存入一个数据栈里面没有那它就会创建这个变量。基本类型就是四类八种!


优缺点:

栈的有点就是存取速度快,缺点就是其生存时间和数据大小必须确定,缺乏灵活性。而堆的话相对于栈优点就是不需要知道数据的大小与存在时间。java的垃圾收集器会自动清理不用的数据。缺点就是每回存储一个数据就要为其创建一个内存空间,存储熟读比较慢。


下面举一些例子方便理解:

栈;

int a=3;

int b=3;

这里的a与b公用一个数据那就是3.故a=b;

String str="abc";

String str1="abc";

这里是一个对象的应用变量 故str=str1。如果不知道你可以用==来判断存储地址是否相等。

堆:

String str=new String("abc");

String str1=new String("abc");

这里的话str与str1就不相等,因为他们的存储地址是不同的。

下面再更详细解析一下例子以便我们更好的理解:

从例子讲解解析

Test test=new Test(1);

这里的new test(1) 它是储存在堆里面的,当然我们还可以在栈里面找到一个test变量。它的取值取决去堆中new test(1)的首地址,而栈中test这个变量就相当于new test(1)的一个引用变量。

引用变量就相当于给我们的new test(1) 起了一个别名,让我们就可以在栈中用这个别名引用堆中的对象。

局部变量永远在栈里。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值