java之string学习

String在Java中是我们用到频率很高的一个类,但也会有很多疑惑的地方,最近看了一些资料,以及jdk的源码,对String的实现有了初步的了解。

①String是一个final类,是不允许继承,不可改变的类。

String是个不可改变类,因此,String类的修改方法,都会生成一个新的String对象。

例如:

String s = "abc";

String x = s.concat("ss");

s仍然是“abc”,x是一个新的对象,值为abcss。

具体创建对象个数学习可参考,http://www.iteye.com/topic/209904

同样原理,String 的+,+=操作也会产生新的对象。

如下:

String s = "abc" + "cd"+"ef";

abccd,abccdef都会存在字符串池中,(abc,cd,ef在编译期就存在字符串池中)


②String 创建的两种基本方法。

我们在创建String时主要有两种基本方法:

一,字符串常量的赋值,String s = "abc"。abc存在栈内存的字符串常量池中。

二,new String()赋值,将创建一个String对象存在,在堆中。


③字符串池

字符串池其实就是常量池中存取String,虚拟机必须为每个被装载的类型维护一个常量池。常量池就是该类型所用到常量的一个有序集和,包括直接常量(string,integer和floating point常量)和对其他类型,字段和方法的符号引用。对于String常量,它的值是在常量池中的。而JVM中的常量池在内存当中是以表的形式存在的,对于String类型,有一张固定长度的CONSTANT_String_info表用来存储文字字符串值,注意:该表只存储文字字符串值,不存储符号引用。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值