• 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.相关内存图:

     
  • 相关阅读:
    ehcarts绘制一个可以拖动的两条曲线的效果
    bootstrap-table如何根据不同传值进行渲染
    语音播报功能
    webpack命令监测文件变化
    webpacck打包完react后引入到html文件中报错:Target container is not a DOM element...
    react app相关知识
    redux-devtools安装
    react-devtools超级简单安装教程
    react-router v3和v4区别
    foreach循环的跳出
  • 原文地址:https://www.cnblogs.com/zdb292034/p/6104205.html
Copyright © 2020-2023  润新知