码迷,mamicode.com
首页 > 编程语言 > 详细

java中string内存的相关知识点

时间:2016-11-26 17:06:18      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:nec   dpx   goto   nfc   pes   cal   udf   class   ddd   

(一):区别java内存中堆和栈:

1.栈:数据可以共享,存放基本数据类型和对象的引用,其中对象存放在堆中,对象的引用存放在栈中; 当在一段代码块定义一个变量时,就在栈中 为这个变量分配内存空间,当该变量退出该作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。
2.堆:存放用new产生的数据,其中清理垃圾采用垃圾回收机制。 在堆中产生了一个数组或对象后,还可以 在栈中定义一个特殊的变量,让栈中这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量。  数组和对象在没有引用变量指向它的时候,才变为垃圾,不能在被使用,但仍 然占据内存空间不放,在随后的一个不确定的时间被垃圾回收器收走(释放掉)。
 
3.相关代码:
技术分享
package zdbString;                                                                           

public class Test {                                                                         
    /*                                                                                       
     * 这个源文件主要是测试java中string的内存原理、运算符“==”和函数equals()的区别                                     
     * 总结:(1)引用str1被放在栈中,字符串常量hello放在常量池中,引用str1指向常量池中的hello;而引用str3被存放在栈中,同时在堆中开辟一块新的内存存放string对象。(2)
      
                                                                            
     * 相关连接网址:http://jingyan.baidu.com/article/8275fc869a070346a03cf6f4.html                 
     */                                                                                     

    public static void main(String[] args) {                                                 

        String str1 = "hello";                                                               
        String str2 = "hello";                                                               

        String str3 = new String("hello");                                                   
        String str4 = new String("hello");                                                   

        System.out.println("str1==str2==="+(str1==str2));//true                             
        System.out.println("str1.equals(str2)==="+(str1.equals(str2)));//true               
        System.out.println("str3==str4==="+(str3==str4));//false                             
        System.out.println("str3.equals(str4)==="+(str3.equals(str4)));//true               
        System.out.println("str1==str3==="+(str1==str3));//false                             
        System.out.println("str1.equals(str3)==="+(str1.equals(str3)));//true               
    }                                                                                       

}                                                                                           
View Code

 4.相关内存图:

技术分享

 

java中string内存的相关知识点

标签:nec   dpx   goto   nfc   pes   cal   udf   class   ddd   

原文地址:http://www.cnblogs.com/zdb292034/p/6104205.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!