Java immutable class
可变类:类的实例创立之后,还可以修改这个实例的内容。
比如创建一个3*3的矩阵,如果设立了set function,在main中可以用set更改对应位置元素的大小。
不可变类:就是类的实例一旦被建立,状态不会发生变化,成员变量不能被更改。
即:Class被定义为final,避免被继承;
所有的成员变量都是private/final的;
不能提供改变类状态(成员变量)的方法,没有成员的set function;
所有方法不能被重载;
Constructor不要引用外部可变对象,如果引用了,即某个类成员不是原始变量或者不可变类,必须在初始化的时候进行defensive copy,确保类不可变。
在JDK中,String,the primitive wrapper classes, and BigInteger and Big Decimal都是不可变类。
以String作为例子,如果一个类是不可变类,以建立的实例状态不可改变,但是这个类还是可以有改变状态的方法,其根本就是创建新的对象。
String A1 = "A";
String A2 = "A"; //不会创建一个新的object,这两个是一样instance。不可变类可以缓存实例进行重复使用,提高计算性能。
String B1 = new String("A");//创建了新的object
String B2 = new String("A");//创建了新的object,B1和B2是不同的instance。
String a = "abc";
String e = "a";
e.add();//false,String is immutable
e+="bc";
if(c==e) //false
if(c.equals(e))//true letter same
还有一个例子,解释了如果对一个包含不可变对象引用的变量上进行计算,这个时候需要 赋值 这个步骤。例子引用网站:
http://www.jb51.net/article/37889.htm
tips: 强不可变类:final class。弱不可变类: 所有方法加final
如果一个类成员不是原始变量或者不可变类,必须在初始化的生活实用深度copy,确保类不可变。
Java immutable class的更多相关文章
- (私人收藏)[开发必备]最全Java离线快速查找手册(可查询可学习,带实例)
(私人收藏)[开发必备]最全Java离线快速查找手册(可查询可学习,带实例) https://pan.baidu.com/s/1L54VuFwCdKVnQGVc8vD1TQnwmj java手册 Ja ...
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- [Java Basics] Stack, Heap, Constructor, I/O, Immutable, ClassLoader
Good about Java: friendly syntax, memory management[GC can collect unreferenced memory resources], o ...
- Why string is immutable in Java ?
This is an old yet still popular question. There are multiple reasons that String is designed to be ...
- Why String is immutable in Java ?--reference
String is an immutable class in Java. An immutable class is simply a class whose instances cannot be ...
- java代码之美(4)---guava之Immutable(不可变)集合
Immutable(不可变)集合 一.概述 guava是google的一个库,弥补了java语言的很多方面的不足,很多在java8中已有实现,暂时不展开.Collections是jdk提供的一个工具类 ...
- JAVA不可变类(immutable)机制与String的不可变性--非常好.
JAVA不可变类(immutable)机制与String的不可变性 https://www.cnblogs.com/jaylon/p/5721571.html
- Java同步注解:@ThreadSafe、@Immutable、@NotThreadSafe、@GuardedBy
Java并发编程中,用到了一些专门为并发编程准备的 Annotation.主要包括三类: <dependency> <groupId>net.jcip</groupId& ...
- Java多线程编程模式实战指南(二):Immutable Object模式
多线程共享变量的情况下,为了保证数据一致性,往往需要对这些变量的访问进行加锁.而锁本身又会带来一些问题和开销.Immutable Object模式使得我们可以在不使用锁的情况下,既保证共享变量访问的线 ...
随机推荐
- UltraEdit (Ctrl + F) 查找、(Ctrl + R)替换功能失效
环境: Windows 7 Service Pack 1 X64 工具: UltraEdit Version 21 症状: UltraEdit (Ctrl + F) 查找.(Ctrl + R)替换功能 ...
- css揭秘之linear-gradient
很神奇的背景设置, 看代码, <html> <title>css</title> <style> .content { background: line ...
- 函数fsp_alloc_free_page
从fsp中分配32个碎片页 /**********************************************************************//** Allocates ...
- PHP libxml RSHUTDOWN安全限制绕过漏洞(CVE-2012-1171)
漏洞版本: PHP PHP 5.5.x 漏洞描述: BUGTRAQ ID: 65673 CVE(CAN) ID: CVE-2012-1171 PHP是一种HTML内嵌式的语言. PHP 5.x版本内的 ...
- SPOJ VLATTICE Visible Lattice Points 莫比乌斯反演
这样的点分成三类 1 不含0,要求三个数的最大公约数为1 2 含一个0,两个非零数互质 3 含两个0,这样的数只有三个,可以讨论 针对 1情况 定义f[n]为所有满足三个数最大公约数为n的三元组数量 ...
- poj2686 Traveling by Stagecoach
http://poj.org/problem?id=2686 Trav ...
- VellCar(barracuda buggy)
这是我的新目标,不过是外国人设计的,youtube上好多相关视频,只是在中国被墙了,FQ能看到一个不一样的世界,附:FQ教程.国外好多玩车的都是选择这辆车,因为它结构紧凑,制作相对简单,但越野性能强悍 ...
- 【原创】MapReduce编程系列之表连接
问题描述 需要连接的表如下:其中左边是child,右边是parent,我们要做的是找出grandchild和grandparent的对应关系,为此需要进行表的连接. Tom Lucy Tom Jim ...
- HDOJ-ACM1017(JAVA)
问题描述: 简单来说,就是 输入N,然后输入N个数据块,一个数据块包含(n,m),并计算0 < a < b < n 且 (a^2+b^2 +m)/(ab) 为整数.其中a,b只要符合 ...
- Task任务