您的位置:首页 > 编程语言 > Java开发

午间学习笔记-20160623-Java String

2016-07-01 14:03 316 查看
一、内存分配

1、栈:存放基本数据类型及对象变量的引用,对象本身不存放于栈中而是存放在堆中

2、堆:创建的对象和数组,在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理

3、静态域:static定义的静态变量成员

4、常量池:存放常量

二、Java String

String不是基本数据类型,是final类,不可被继承,代表不可变的字符序列,为不可变对象。

String一旦被创建,就不能修改它的值。

对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去。

String类的本质是字符数组char[],并且其值不可改变。

private final char value[];


String类对象有个特殊的创建方式,就是直接指定比如

String str = "abc";


“abc”就表示一个字符串对象,而str是“abc”对象的地址,也叫做“abc”对象的引用。

Java运行时会维护一个String Pool(String池),String池用来存放运行时产生的各种字符串,并且池中的字符串的内容不重复。而一般的对象不存在这个缓冲池,并且创建的对象仅仅存在于方法的堆栈区。

创建String的方式

1、使用new关键字创建字符串

String str = new String("abc");


2、直接指定

String str = "abc";


String对象的创建特性

① 当使用任何方式来创建一个字符串对象str时,Java运行时(运行时JVM)会拿着这个字符串的内容在String池中查找是否存在内容相同的字符串对象,如果不存在,则在池中创建一个字符串s,否则,不在池中添加

② Java中,只要使用new关键字来创建对象,则一定会(在堆或栈)创建一个新的对象

③ 使用直接指定,使用纯字符串串联或者在编译期间可以确定结果的变量表达式来创建字符串对象,则仅仅会检查维护String池中的字符串, 池中没有就在池中创建一个,有则罢了。但绝对不会在堆栈区再去创建一个String对象。

④ String的intern()方法

该方法是一个本地方法,定义为public native String intern();

intern()方法的价值在于让开发者能将注意力集中到String池上。当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(该对象由 equals(Object) 方法确定),则返回池中的字符串。否则,将此 String 对象添加到池中,并且返回此 String 对象的引用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: