一、关于不可变对象与不可变对象引用:
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
jdk源码之String
最新推荐文章于 2022-07-14 23:55:21 发布