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


实例化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一次就在堆上创建一个对象,用引号创建的如果在常量池中已有就直接指向,不用创建。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>