Java学习手册:实例化String对象

版权声明:本文为博主原创文章,未经博主允许不得转载,转载请务必注明出处: https://blog.csdn.net/MaybeForever/article/details/89430916

实例化String对象的方法:
——直接赋值(多)
——使用关键字new

注:使用new关键字实例化时,会开辟两个内存空间,其中一个是无用的。如下图所示:
在这里插入图片描述
java.lang.string使用了final修饰,不能被继承。(String是不可变对象:字符串创建后,内容不可改变)字符串底层封装了字符数组及针对字符数组的操作算法。字符串一旦创建,对象永远无法改变,但字符串引用可以重新赋值。Java字符串在内存中采用Unicode编码方式,任何一个字符(算一个字符长度)对应两个字节的定长编码。若要修改String,则会创建新的对象。

(1)单独使用“ ”引号创建的字符串都是常量,编译期就已经确定存储到String Pool中
(2)使用new String(" ")创建的对象会存储到heap(堆)中,是运行期新创建的
(3)使用只包含常量的字符串连接符如“aa”+"aa"创建的也是常量,编译期就已经确定存储到String Pool中
(4)使用包含变量的字符串连接符“aa”+s1创建的对象是运行期间才创建的,存储在heap中

String常量值:静态字符串在常量池中创建,并尽量使用同一对象,重用静态字符串。对于重复出现的字符串直接量,JVM会首先在常量池中查找,如果存在即返回对象。

一、下面程序中,该过程共创建几个对象?

String s1 = new String("s1");
String s2 = new String("s1");

答案:3个。编译器Constant Pool(常量池)中创建1个,运行期heap(堆)中创建2个。
分析:用new创建的每new一次就在堆上创建一个对象,用引号创建的如果在常量池中已有就直接指向,不用创建。

猜你喜欢

转载自blog.csdn.net/MaybeForever/article/details/89430916