zoukankan      html  css  js  c++  java
  • Java基础-String 存储机制管理

    JVM运行的时候,将内存分为两个部分,一部分是堆,一部分是栈。堆中存放的是创建对象,而栈中存放的则是方法调用过程中的局部变量或引用。在设计JAVA字符串对象内存实现的时候,在堆中又开辟了一块很小的内存,称之为字符串常量池,专门用来存放特定的字符串对象的。

    例如:

    String s1="JavaSE6.0";           //存放在字符串常量池中。性能高
    String str = new  String("JavaSE6.0"); //存放在堆中
    

    s1==str ; //返回false s1.squals(str); //返回 true s1.intern() ==str.intern() ;//返回 true public String intern()
    此方法将指定字符串对象在字符串常量池中对应对象的引用返回,若其本身就在字符串常量池中,则直接将自己的引用返回,若该字符串在堆中,则返回字符串常量池中其联系对象的引用。

     Java堆(Java Heap)是Java虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享的一块内存区域。在此区域的唯一目的就是存放对象实例,几乎所有的对象实例都是在这里分配内存,但是这个对象的引用却是在栈(Stack)中分配。因此,执行String s = new String("s")时,需要从两个地方分配内存:在堆中为String对象分配内存,在栈中为引用(这个堆对象的内存地址,即指针)分配内存

     

     问题:(1)在程序的第7~9行处,String对象创建了几个对象?分别写出。

              (2)在程序的第10~12行处,分别写出输出结果。

     分析:程序执行到第7行时,首先在String常量池中查找有没有字符常量“good”。因为没有所以创建“good”对象,当执行new String(“good")时,则在Java的堆中创建一个”good”对象,而str是该对象的引用,因此共计创建2个对象。

            执行到第8行,首先在String常量池中查找有没有字符串常量“good",有则直接将str1作为String常量池中“good”的一个引用,当你重新声明一个String型变量为“good”时,将使用串池里原来的那个“good",而不用重新分配内存,也就是说,str与str1将会指向同一块内存,因此,此时没有创建任何对象。

           执行到第9行,依次在String常量池中查找有没有字符串常量“good”,有则不进行再次创建,由于这里用了new关键字(有new就有对象),所以在Java堆中又创建了一个“good”对象(地址与第一句在堆中创建的地址不同),而str2则是这个对象的引用,因此执行此句时,创建了1个对象。

          执行到第10行, “==”是判断对象的,由于str指向的是Java堆中的“good”对象,而str1指向的是String常量池中的“good”对象,所以返回值为false。

          执行到第11行,由于String类中的equals判断的是对象的内容而不是内存地址,由于所有内容都是good,所以返回值为true。

         第12行与第10行类似。

    答案:两个对象

              没有对象

             1个对象

              false

              true

              false

     

  • 相关阅读:
    Go Example--方法
    Go Example--结构体
    Flutter项目实操---我的界面搭建、开源中国API流程了解、HTTP请求封装、登录处理<二>
    Java精通并发-CAS底层实现与AtomicInteger源码剖析、关于CAS问题描述
    大数据JavaWeb之JDBC基础----快速入门、各个类详解(DriverManager、Connection、Statement)
    Flutter项目实操---开源中国之项目说明、基础框架搭建、基础BottomBar、侧滑菜单<一>
    Kotlin项目实战之手机影音---主界面tab切换、home界面适配、获得首页网络数据
    android高级UI之Canvas综合案例操练
    开启Fluter基础之旅<六>-------自定义View、牛逼动画效果
    Z-score
  • 原文地址:https://www.cnblogs.com/hwaggLee/p/4485894.html
Copyright © 2011-2022 走看看