String a=new String("b"+"c")会创建几个对象?

简介:

四个

b

c

new出来的一个

a指向


1.String a=new String("b"+"c"); 
b一个     c一个      b+c一个     a一个      总共四个
1、Java中New出的对象则始终被JVM存放在堆中,创建的字串常量则始终被JVM存放在数据段区常量池中。

2、String是不可变的
String a=new String("b"+"c");

字符串常量 "b" 被JVM存放在数据段区常量池中
字符串常量 "c" 被JVM存放在数据段区常量池中
由于String不可变性,"b"+"c" 又生成了一个字符串 被JVM存放在数据段区常量池中
new String("b"+"c")对象被JVM存放在堆中

总共四个。



string的不可变性

String a = new String("Hello");

String b = new String("world");

String c = a + b;//c = Helloworld

首先在栈中有个"a"变量指向堆中的"Hello"对象...
栈中"b"变量指向堆中的"world"对象
当执行到c = a + b;
系统重新在堆中new一个更大的数组出来,然后将"Hello"和"world"都复制进去,然后栈中的"c"指向这个新new出来的数组...
所谓的不可变是指:它没有在原数组“Hello”上进行修改,而是新建了个更大数组进行扩展,也就是说,这时候堆里还是有“Hello”这个对象数组存在的,只不过这个时候"s"变量不在指向"Hello"这个数组了,而是指向了新new出来的数组,这就是和StringBuffered的区别,后者是在原数组上进行修改,改变了原数组的值,StringBuffered不是通过新new一个数组去复制,而是在原数组基础上进行扩展...再让变量指向原数组....



目录
相关文章
|
1月前
|
缓存 Java
Java中循环创建String对象的内存管理分析
Java中循环创建String对象的内存管理分析
25 2
|
5天前
|
Java 开发者
干货总结|快速构造String对象及访问其内部成员的技巧
本文详细解释了String类的底层实现,介绍了构造String对象及其访问其内部成员的技巧。
|
11天前
|
存储 Java 对象存储
String str="Hello" 与 String str=new String(“Hello”)一样吗?
String str="Hello" 与 String str=new String(“Hello”)一样吗?
|
1月前
|
JavaScript
js 字符串String转对象Object
该代码示例展示了如何将一个以逗号分隔的字符串(`'1.2,2,3,4,5'`)转换为对象数组。通过使用`split(',')`分割字符串并`map(parseFloat)`处理每个元素,将字符串转换成浮点数数组,最终得到一个对象数组,其类型为`object`。
|
7月前
|
对象存储
String_s1_=_new_String(“abc“);这句话创建了几个字符串对象?
String_s1_=_new_String(“abc“);这句话创建了几个字符串对象?
|
4月前
|
前端开发 Java 测试技术
把List<对象>转变<String,List<对象>>形式,k为判断的值,v为k重复的数据。
把List<对象>转变<String,List<对象>>形式,k为判断的值,v为k重复的数据。
22 0
|
8月前
|
Java 程序员 编译器
new String(“hello“)之后,到底创建了几个对象?
最近,有很多优秀的程序员从大厂毕业, 再加上大环境的影响,很多正在找工作的小伙伴也感觉技术面试越来越难,基本上都会问技术底层原理,甚至有些还会问到操作系统层面的知识。 如果技术功底不扎实,确实很难找到合适的岗位。
63 0
|
5月前
|
JSON Java 数据格式
Java jackson 由String转成List和各种对象
时间久了,会忘记具体怎么转,记录一下,后面方便使用
74 1
|
7月前
|
Java
每天一道面试题之String str=“i“与 String str=new String(“i”)一样吗?
每天一道面试题之String str=“i“与 String str=new String(“i”)一样吗?
|
8月前
|
Java 编译器
JVM执行引擎、对象实例化、String相关知识
执行引擎就是执行内存中的指令,将字节码指令解释/编译为对应平台上的本地机器指令,充当了将高级语言翻译为机器语言的使者。
43 0