String str = new String(abc)创建了几个对象?结合源码解析
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)创建了几个对象?结合源码解析相关推荐
- 云端飘 String s=new String(abc)创建了几个对象?
转自:http://www.cnblogs.com/ydpvictor/archive/2012/09/09/2677260.html -------------------------------- ...
- String str =new String(“abc“)和 String str = “abc“的比较
String是一个非常常用的类,应该深入的去了解String 如: String str =new String("abc") String str1 = "abc&qu ...
- String s=new String(abc)创建了2个对象的原因
问题:String str=new String("abc"); 这行代码究竟创建了几个String对象呢? 相信大家对这道题并不陌生,答案也是众所周知的,2个. 接下来我们就从这 ...
- Java:面试题:String s=new String(abc)创建了几个对象?
String str=new String("abc"); 紧接着这段代码之后的往往是这个问题,那就是这行代码究竟创建了几个String对象呢? 相信大家对这道题并不陌生,答案 ...
- String str 与 String str=new String() 区别
1.当使用String str="abc",这种方式时,先去内存的Heap中找是否存在"abc"这个字符串,若存在,则将地址引用.若不存在则创建. 2.当使用S ...
- String str=“i“与 String str=new String(“i”)一样吗?
面试题汇总 String str="i"与 String str=new String("i")一样吗? 不一样 因为内存的分配方式不一样.String str ...
- 8.String str=“i“与 String str=new String(“i”)一样吗?
不一样 因为内存的分配方式不一样.String str="i"的方式,Java 虚拟机会将其分配到常量池中:而 String str=new String("i" ...
- JDK源码解析之 Java.lang.String
String 类代表字符串.Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现. 字符串是常量:它们的值在创建之后不能更改.字符串缓冲区支持可变的字符串.因 ...
- JavaSE09:String、StringBuffer、StringBuilder底层源码解析(纯干货)
写在前面 结束了多线程的学习后,常用类的学习立马就安排上了.在学习的过程中,发现源码是很重要的,只知道怎么用却不知道底层是很不好的,而我又太懒.看源码也是零零散散,所以本篇博客旨在鞭策自己多多阅读现阶 ...
最新文章
- python04-列表与元祖
- mysql防止从节点可写数据_mysql 主从数据不一致 Slave_SQL_Running: No 解决方法
- C,C++开源项目中的100个Bugs
- C++ 构造函数初始化列表
- iOS - 切换图片/clip subview/iCarousel
- [转]利用ASP.NET 2.0创建自定义Web控件(1)
- UVA-10285 Longest Run on a Snowboard (递推)
- 线程同步机制:互斥量、信号量、读写锁、条件变量
- JAVA编程多线程面试常见知识点灵魂拷问(一)
- Hadoop本地运行模式了解~
- Prompt范式,真香
- Swift-函数学习
- 题目13 在O(1)时间删除链表节点
- aoa计算机二级考试答案操作题,浙江省计算机二级等级考试aoa理论题.pdf
- matlab胡良剑第五章,matlab数学实验第一至第四章答案(胡良剑)
- UE4 C++与UMG
- python孩子 哪里学_Python知识免费学!孩子提高逻辑思维,这样练就够了!
- Rockchip WIFI 配置说明
- 【ICML 2015迁移学习论文阅读】Unsupervised Domain Adaptation by Backpropagation (DANN) 反向传播的无监督领域自适应
- java常用类库——util包
热门文章
- websocket中发生数据丢失_node.js – Websocket传输可靠性(重新连接期间Socket.io数据丢失)...
- linux中波浪号代表什么_Linux有什么吸引力,在程序员中如此受欢迎?
- python sqlite connection
- python I/O原理
- C++ linux系统api
- scipy.stats
- 职业经理人必读知识:36页SWOT全面解读,有效提升分析能力
- 测试助手健康 Test-AssistantHealth failed for server
- java线程和内核线程的,Java中内核线程理论及实例详解
- python读取文件特定内容_利用python代码获取文件特定的内容,并保存为文档