zoukankan      html  css  js  c++  java
  • java中string内存的相关知识点

    (一):区别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.相关内存图:

     
  • 相关阅读:
    C#实现通过拼多多分享微信公众号实现查询优惠券、佣金比率
    淘宝客常用接口整理
    京东联盟开发(1) 商品SKUID采集
    Grafana 安装及 Windows 应用程序服务配置工具 NSSM使用
    Windows Server 2008R2 配置网络负载平衡(NLB)
    IIS 日志分析工具:Log Parser Studio
    curl: (25) Failed FTP upload: 550 解决方案
    搭建TFS 2015 Build Agent环境(四)
    Dump中查看dictionary信息的方法
    Dump中查看DataTime时间方法
  • 原文地址:https://www.cnblogs.com/zdb292034/p/6104205.html
Copyright © 2011-2022 走看看