请问:基本数据类型是在栈中存储的,引用类型的内容是在堆中存储的。
那么int a = 1
int b = 1;问题1:int a = 1 在栈中是怎么存储的,a代表什么,是代表引用吗?问题2:a和b在栈中是同一块地址吗?
string str1 = "test";
string str2 = "test";问题3:str1和str2的内容相同,那么str1和str2在堆中占用的是同一块地址吗?问题4:在栈中存储和在堆中存储的区别是什么?
那么int a = 1
int b = 1;问题1:int a = 1 在栈中是怎么存储的,a代表什么,是代表引用吗?问题2:a和b在栈中是同一块地址吗?
string str1 = "test";
string str2 = "test";问题3:str1和str2的内容相同,那么str1和str2在堆中占用的是同一块地址吗?问题4:在栈中存储和在堆中存储的区别是什么?
栈的速度比堆快,但是栈的控件比较小。问题3:str1和str2的内容相同,那么str1和str2在堆中占用的是同一块地址吗?
如果是这样创建:
string str1 = "test";
string str2 = "test";
答案是肯定的。
其他的方式赋值,比如:
String str1 = "test";
String str2 = new String("test";)
答案是NO。问题2:a和b在栈中是同一块地址吗?
不是,它们有不同的栈地址。问题1:int a = 1 在栈中是怎么存储的,a代表什么,是代表引用吗?
是栈中一段32位的地址空间。a就代表这段地址空间。
另外问题2,
String str1 = "test";
String str2 = "test";
String str3 = new String("test");
str1和str2是同一段内存中的引用,引用同一段空间,该空间内容为"test",——是在栈中的。
而str3是一个String对象,内容为"test",——是在堆中的。
显然str1==str2,str1!=str3.
public static void main(String[] args){
String str1 = "test";
String str2 = "test";
String str3 = new String("test");
System.out.println(str1==str2);//true
System.out.println(str1==str3);//false
}
}
String str1 = "test";
String str2 = "test";
String str3 = new String("test");
str1和str2是同一段内存中的引用,引用同一段空间,该空间内容为"test",——是在栈中的。
而str3是一个String对象,内容为"test",——是在堆中的。
显然str1==str2,str1!=str3.str1和str2是在栈中分配的吗?为什么?
补充:
1。栈仅次于cpu寄存器,而堆是使用的内存。寄存器的速度比访问内存快。所以访问栈比访问堆速度快
2。我认为问题2应该这样描述,a和b在栈中不是同一个地址,但是a和b指向同一个栈的空间地址
3。问题1中,a代表的就是1在栈中的空间地址,所以a可以理解为引用
谁说堆是先进先出的啊???
那是队列可好!!!在java中,是靠垃圾回收器回收的
对于String str1 = "test";
String str2 = "test";
实际上是在内存的Data Segment区域,而不是在栈中的,str1也是个引用指向Data Segment中的“test”的,同样 str2也一样
不好意思,不是的,初学java,有好多问题。
一 String str = "xyz";
二 int a = 1;
三 static声明的变量
四 final声明的变量
五 String str = new String("xyz")
分别存储到内存的哪里?
我真的有点晕,希望有人能帮我,不胜感激!!!