String str = new String("abc")创建了几个对象?结合源码解析

  首先,我们看一下jdk源码: 

 1 /**
 2      * Initializes a newly created {@code String} object so that it represents
 3      * the same sequence of characters as the argument; in other words, the
 4      * newly created string is a copy of the argument string. Unless an
 5      * explicit copy of {@code original} is needed, use of this constructor is
 6      * unnecessary since Strings are immutable.
 7      *
 8      * @param  original
 9      *         A {@code String}
10      */
11     public String(String original) {
12         this.value = original.value;
13         this.hash = original.hash;
14     }

  大家都知道String本身就是个引用类型,我们可以将String str = new String("adc")分为四部分来看,String str 第一部分变量名,=为第二部分给str赋值使用的,new String()为第三部分创建对象,"abc"为第三部分对象内容,然而第一部分和第二部分并没有创建对象。第三部分new String()肯定是创建了对象的。那么另一个对象时从何来的呢?从上面的源码中我们会看到一个带参的String的构造器;如果方法区的常量池里面没有所传的参数对象,这个参数会在方法区的常量池里面创建一个,加上我们new出来的,会有两个对象;但是如果在方法区里面有该参数,那么就会直接获取,因此jvm只会在堆里面创建对象本身,栈里面引用地址,这个时候就只有一个对象存在。所以,至于有多少个对象被创建,这个主要看之前是不是String original参数传入,要是情况而定。

  如有错误请多多指出。

转载于:https://www.cnblogs.com/houstao/p/8252199.html

String str = new String(abc)创建了几个对象?结合源码解析相关推荐

  1. 云端飘 String s=new String(abc)创建了几个对象?

    转自:http://www.cnblogs.com/ydpvictor/archive/2012/09/09/2677260.html -------------------------------- ...

  2. String str =new String(“abc“)和 String str = “abc“的比较

    String是一个非常常用的类,应该深入的去了解String 如: String str =new String("abc") String str1 = "abc&qu ...

  3. String s=new String(abc)创建了2个对象的原因

    问题:String str=new String("abc"); 这行代码究竟创建了几个String对象呢? 相信大家对这道题并不陌生,答案也是众所周知的,2个. 接下来我们就从这 ...

  4. Java:面试题:String s=new String(abc)创建了几个对象?

    String str=new String("abc");   紧接着这段代码之后的往往是这个问题,那就是这行代码究竟创建了几个String对象呢? 相信大家对这道题并不陌生,答案 ...

  5. String str 与 String str=new String() 区别

    1.当使用String str="abc",这种方式时,先去内存的Heap中找是否存在"abc"这个字符串,若存在,则将地址引用.若不存在则创建. 2.当使用S ...

  6. String str=“i“与 String str=new String(“i”)一样吗?

    面试题汇总 String str="i"与 String str=new String("i")一样吗? 不一样 因为内存的分配方式不一样.String str ...

  7. 8.String str=“i“与 String str=new String(“i”)一样吗?

    不一样 因为内存的分配方式不一样.String str="i"的方式,Java 虚拟机会将其分配到常量池中:而 String str=new String("i" ...

  8. JDK源码解析之 Java.lang.String

    String 类代表字符串.Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现. 字符串是常量:它们的值在创建之后不能更改.字符串缓冲区支持可变的字符串.因 ...

  9. JavaSE09:String、StringBuffer、StringBuilder底层源码解析(纯干货)

    写在前面 结束了多线程的学习后,常用类的学习立马就安排上了.在学习的过程中,发现源码是很重要的,只知道怎么用却不知道底层是很不好的,而我又太懒.看源码也是零零散散,所以本篇博客旨在鞭策自己多多阅读现阶 ...

最新文章

  1. python04-列表与元祖
  2. mysql防止从节点可写数据_mysql 主从数据不一致 Slave_SQL_Running: No 解决方法
  3. C,C++开源项目中的100个Bugs
  4. C++ 构造函数初始化列表
  5. iOS - 切换图片/clip subview/iCarousel
  6. [转]利用ASP.NET 2.0创建自定义Web控件(1)
  7. UVA-10285 Longest Run on a Snowboard (递推)
  8. 线程同步机制:互斥量、信号量、读写锁、条件变量
  9. JAVA编程多线程面试常见知识点灵魂拷问(一)
  10. Hadoop本地运行模式了解~
  11. Prompt范式,真香
  12. Swift-函数学习
  13. 题目13 在O(1)时间删除链表节点
  14. aoa计算机二级考试答案操作题,浙江省计算机二级等级考试aoa理论题.pdf
  15. matlab胡良剑第五章,matlab数学实验第一至第四章答案(胡良剑)
  16. UE4 C++与UMG
  17. python孩子 哪里学_Python知识免费学!孩子提高逻辑思维,这样练就够了!
  18. Rockchip WIFI 配置说明
  19. 【ICML 2015迁移学习论文阅读】Unsupervised Domain Adaptation by Backpropagation (DANN) 反向传播的无监督领域自适应
  20. java常用类库——util包

热门文章

  1. websocket中发生数据丢失_node.js – Websocket传输可靠性(重新连接期间Socket.io数据丢失)...
  2. linux中波浪号代表什么_Linux有什么吸引力,在程序员中如此受欢迎?
  3. python sqlite connection
  4. python I/O原理
  5. C++ linux系统api
  6. scipy.stats
  7. 职业经理人必读知识:36页SWOT全面解读,有效提升分析能力
  8. 测试助手健康 Test-AssistantHealth failed for server
  9. java线程和内核线程的,Java中内核线程理论及实例详解
  10. python读取文件特定内容_利用python代码获取文件特定的内容,并保存为文档