基本数据类型和引用类型的区别

请问:基本数据类型是在栈中存储的,引用类型的内容是在堆中存储的。
那么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:在栈中存储和在堆中存储的区别是什么?


------------------------------------------------------------------------------------------------

问题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就代表这段地址空间。

----------------------------------------------------------------------------------------------------------------

Java的内存分配上,主要分4个块!
一块是用来装代码的,就是编译的东西。
一块是用来装静态变量的,例如用static关键字的变量,例如字符串常量。
一块是stack,也就是栈,是用来装变量和引用类型的!但区别在于,装了变量以后,变量上是有值的,而引用类型本身在stack上是没有值的。
一块是heap,也就是堆!堆可以一句话概括,装new出来的东西!

所以综上所述,基本数据类型都在stack中,而引用类型,变量是放在stack中,真正有内容的东西放在heap中,也就是当new了一个新的引用类型,他就会放在堆中,同时栈中的引用类型变量会指向堆中你new出来的东西!
这样说希望能帮你了解到java的内存分配问题。
Java的内存分配上,主要分4个块!
一块是用来装代码的,就是编译的东西。
一块是用来装静态变量的,例如用static关键字的变量,例如字符串常量。
一块是stack,也就是栈,是用来装变量和引用类型的!但区别在于,装了变量以后,变量上是有值的,而引用类型本身在stack上是没有值的。
一块是heap,也就是堆!堆可以一句话概括,装new出来的东西!

所以综上所述,基本数据类型都在stack中,而引用类型,变量是放在stack中,真正有内容的东西放在heap中,也就是当new了一个新的引用类型,他就会放在堆中,同时栈中的引用类型变量会指向堆中你new出来的东西!
这样说希望能帮你了解到java的内存分配问题。
Java的内存分配上,主要分4个块!
一块是用来装代码的,就是编译的东西。
一块是用来装静态变量的,例如用static关键字的变量,例如字符串常量。
一块是stack,也就是栈,是用来装变量和引用类型的!但区别在于,装了变量以后,变量上是有值的,而引用类型本身在stack上是没有值的。
一块是heap,也就是堆!堆可以一句话概括,装new出来的东西!

所以综上所述,基本数据类型都在stack中,而引用类型,变量是放在stack中,真正有内容的东西放在heap中,也就是当new了一个新的引用类型,他就会放在堆中,同时栈中的引用类型变量会指向堆中你new出来的东西!
这样说希望能帮你了解到java的内存分配问题。



























猜你喜欢

转载自blog.csdn.net/weixin_42044486/article/details/80239951