欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-22 09:28:16
...

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

注:使用new关键字实例化时,会开辟两个内存空间,其中一个是无用的。如下图所示:
Java学习手册:实例化String对象
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一次就在堆上创建一个对象,用引号创建的如果在常量池中已有就直接指向,不用创建。