午间学习笔记-20160623-Java String

一、内存分配
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 对象的引用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值