jdk源码之String

一、关于不可变对象与不可变对象引用:
1、对于java中不可变对象
定义:如果某个对象在被创建后其状态就不能被修改,称其为不可变对象。
好处:不可变对象一定是线程安全的。
不可变性≠对象中所有的域都为final类型,即使都为final这个对象也仍是可变的,因为在final类型的域中可以保存对可变对象的引用。
满足以下条件:对象才是不可变的:
a、对象创建后其状态就不能修改;
b、对象的所有域都是final类型(不可变对象并不需要将其所有的域都声明为final类型,下文会针对String描述。但是个人使用中,尽量不要这样做)
c、对象是正确创建的即this没有逃逸。
例如:创建一个String examp = “stri”;此时”stri”是新创建的对象是不可变对象,而examp是对象的引用。
二、String
1、String本身是final类型;
2、使用构造方法创建string,此时创建的值存入value。而value是private final char value[];final类型。
在string中不存在value属性的set与get方法,所以外部操作无法对其操作。
在string中的private int hash,非final类型,此处就用到了一中的b,string会将散列值的计算推迟到第一次调用hashcode时,并将计算出的结果缓存到hash。
这篇文章很好http://www.importnew.com/16817.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值