对于内存地址 ,栈和堆的理解。

本文深入解析了内存管理中的栈和堆概念,详细说明了基本数据类型与引用数据类型的存储方式,探讨了不同创建字符串实例的区别及其对内存的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    对于内存地址 ,栈和堆的理解。

引用数据类型名称所代表的是地址,地址为二进制数字,当我们试图打印内存地址时,它会以16进制的方式表现出来。所以地址的实质还是整型数字,属于基本数据类型,所以他和基本数据类型共同存放在栈中。(栈也只存放基本类型和地址还有部分string(下面有讲))

内存地址可以指向对应的堆中的对象或数组。
在声明引用类型时,地址就存在了。形参和实参同名是不影响的。因为传入的实参是地址。
堆是实际存放对象和数组的地方。数据内容相对基本类型庞大所以又称为复杂类型。
对象或数组的成员变量(属性、行为)也应该在堆中,他们是组成复杂类型的一部分。
(这些是我自己的理解,可能有错)

String str1 =new String ("abc");
String str2 =new String ("abc");
System.out.println(str1==str2); // false
这里比较的是1、2的地址; 如果换成.equals会比较值,答案就应该是true.

String str1 = "abc";
String str2 = "abc";
System.out.println(str1==str2); //true 
这里比较的是 1、2的值;

(String是一个特殊的包装类数据。可以用:
String str = new String("abc");
String str = "abc";
两种的形式来创建,第一种是用new()来新建对象的,它会在存放于堆中。每调用一次就会创建一个新的对象。
而第二种是先在栈中创建一个对String类的对象引用变量str,然后查找栈中有没有存放"abc",如果没有,则将"abc"存放进栈,并令str指向”abc”,如果已经有”abc” 则直接令str指向“abc”。)
这段是复制过来的。

所以延伸了字符串值的比较的时候用.equals不容易出错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值