java基础之 string

时间:2022-04-26 03:51:01

一 string

public final class String

继承自java.lang.Object类。

实现了接口:

java.io.Serializable, Comparable<String>, CharSequence

String类是不能被修改的字符串。因为String类里面的数据是final类型的。

区别两种方式:

① String s = "abc";

只在常量池中创建,然后返回对象地址。之后所有“aaaa"都是这个地址。常量池中不能有重复的字符串

② String s = new String("abc");

首先我们要明白两个概念,引用变量和对象,对象一般通过new在堆中创建,s只是一个引用变量。
所有的字符串都是String对象,由于字符串文字的大量使用,java中为了节省时间,在编译阶段,会把字符串文字放在常量池中,常量池的一个好处就是可以把相同的字符串合并,占用一个空间,我们可以用==判断一下两个引用变量是否指向了一个地址即一个对象。

String s = new String("abc")实际上是"abc"本身就是文字池中的一个对象,在运行 new
String()时,把常量池即pool中的字符串"abc"复制到堆中,并把这个对象的应用交给s,所以创建了两个String对象,一个在pool中,一个在堆中。

(java.lang.String的intern()方法s1.intern()方法的返回值还是字符串"abc",表面上看起来好像这个方法没什么用处。但实际上,它做了个小动作:检查字符串池里是否存在"aaaa"这么一个字符串,如果存在,就返回池里的字符串;如果不存在,该方法会 把"abc"添加到字符串池中,然后再返回它的引用。

二 String  StringBuffer  StringBuilder

String :常量

StringBuffer:线程安全

StringBuilder:线程不安全

ps:推荐一篇精华文章  http://blog.csdn.net/clam_clam/article/details/6831345