栈内存与堆内存在数据共享方面的区别

本文探讨栈内存和堆内存的区别,特别是在数据共享方面。栈内存中,基本类型的变量和直接赋值的字符串常量是共享的,而通过new创建的字符串对象存储在堆内存中,不共享。使用==比较栈内存中的相同值的变量或堆内存中的对象,结果可能不同。在堆内存中,不同对象间的==比较总是返回false,若要判断String对象内容相等,应使用equals()方法。
摘要由CSDN通过智能技术生成

栈内存的一个特点是数据共享,这样设计是为了减小内存消耗,前面定义了 i=1, i和 1都在栈内存内,如果再定义一个 j=1,此时将 j放入栈内存,然后查找栈内存中是否有 1,如果有则 j指向 1。如果再给 j赋值 2,则在栈内存中查找是否有 2,如果没有就在栈内存中放一个 2,然后 j指向 2。也就是如果常量在栈内存中,就将变量指向该常量,如果没有就在该栈内存增加一个该常量,并将变量指向该常量。

 

 

如果j++,这时指向的变量并不会改变,而是在栈内寻找新的常量(比原来的常量大1),如果栈内存有则指向它,如果没有就在栈内存中加入此常量并将j指向它。这种基本类型之间比较大小和我们逻辑上判断大小是一致的。如定义i和j是都赋值1,则i==j结果为true。==用于判断两个变量指向的地址是否一样。i==j就是判断i指向的1和j指向的1是同一个吗?当然是了。对于直接赋值的字符串常量(如String s=“Hello World”;中的Hello World)也是存放在栈内存中,而new出来的字符串对象(即String对象)是存放在堆内存中。如果定义String s=“Hello World”和String w=“Hello World”,s==w吗?肯定是true,因为他们指向的是同一个Hello World。

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值