zoukankan      html  css  js  c++  java
  • new String创建了几个对象

    String str = new String(“abc”)  到底创建了几个对象?

    首先String str是定义了一个字符串变量,并未产生对象,=不产生对象,那么只有后面的new String("abc")了。把它拆分成"abc"和new String(),首先在字符串常量池去寻找有没有"abc"这个字符串,没有就创建一个“abc”字符串对象在栈中,然后new String把这个字符串对象拷贝一份到堆中,返回这个对象的引用。所以一共产生两个对象

    试问str变量存储在堆中还是栈中?关键点是区分str是成员变量还是局部变量,如果是局部变量在方法体内,它就存储在栈中,如果是成员变量那么久跟随成员对象存储在堆中。比如

    class A{
      String str = new String(“abc”) 
        public void getA(){
        return str;
      }
    }
    以上变量str存储在堆中


    class A{
      public void getA(){
        String str = new String(“abc”) 
        return str;
      }
    }
    以上变量str存储在栈中

    String str = "a"+"b";产生几个对象?答案是3个,字符串常量区存储"a","b","ab"三个对象

    String str = "a"+new String("b");产生几个对象?答案是3个,字符串常量区存储"a","b",堆中存储new String("b")的对象。

    声明:

    只有

    使用引号包含文本的方式创建的String对象之间使用“+”连接产生的新对象才会被加入字符串池中。对于所有包含new方式新建对象(包括null)的“+”连接表达式,它所产生的新对象都不会被加入字符串池中

    ---------------------------------------------------------------------------------------

    来源:CSDN 
    原文:https://blog.csdn.net/w8998036/article/details/54893453 

  • 相关阅读:
    图像、视频等文件类型(拓展名)
    图像、视频等文件类型(拓展名)
    Mstar 编译器的搭建
    microsoft windows network 不允许一个用户使用一个以上用户名与服务器或共享资源的多重连接
    Ubuntu 14.04报“leaking memory”错误
    linux下创建与删除用户详细步骤 ***
    GX 编译器 的搭建
    VMware网络模式介绍
    ubuntu 源更新(sources.list)
    目录的执行权限
  • 原文地址:https://www.cnblogs.com/nov5026/p/11973553.html
Copyright © 2011-2022 走看看