对于内存地址 ,栈和堆的理解。
引用数据类型名称所代表的是地址,地址为二进制数字,当我们试图打印内存地址时,它会以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不容易出错。
对于内存地址 ,栈和堆的理解。
最新推荐文章于 2025-07-15 16:05:52 发布