关闭

[置顶] Java---堆栈的理解

标签: java常量池
335人阅读 评论(0) 收藏 举报
分类:

堆栈的理解

 在JAVA中,把内存分为两种----1.堆内存;2.栈内存
***栈空间是由系统自动分配和释放的;
***堆空间是是手动申请和释放的。
优势:栈比堆存取速度快,数据可共享
注意: 栈是来存放对象引用,而堆是存放JAVA对象数据的
**栈中变量指向堆中变量-----可以理解为JAVA的指针
----在我们声明基本数据类型和对象的引用变量的时候,就会由栈内存进行分配。当在一段代码快中定义一个变量,Java就在栈中为其分配内存空间,若该变量退出作用域后,JAVA会自动释放该变量占有内存,另作他用。
**例如在我们定义一个变量 Object obj = null;这时就会由栈内存为其分配内存空间。
----当我们在new产生一个新的对象时,就是在堆内存中来为其分配内存空间,里面保存的就是对象的信息内容。
栈中主要存放一些基本类型的变量数据(int short long byte double float double boolean char)

特别注意!!!:常量是保存在常量池中的
String类型的数据是常量(String类是final类,不可被继承),还有被static final修饰了的基本类型数据是常量。
eg:int a =1 ----这个1在这里并不是常量,它是被分配在了栈中的,并且放在了一个指令指针上;当再次定义一个int b=1时,如果有相同的值1,那么这个b会直接指向这个值为1的指针,这样它们共享了数据,但它们之间任何一个改变了都不会影响到其他值。
不要把栈中保存的值和常量池中保存的值混淆了。
String常量对象是保存在常量池的,或被static final修饰的变量才算常量。
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:35957次
    • 积分:934
    • 等级:
    • 排名:千里之外
    • 原创:52篇
    • 转载:23篇
    • 译文:0篇
    • 评论:18条
    最新评论