可变类:类的实例创立之后,还可以修改这个实例的内容。

比如创建一个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的更多相关文章

  1. (私人收藏)[开发必备]最全Java离线快速查找手册(可查询可学习,带实例)

    (私人收藏)[开发必备]最全Java离线快速查找手册(可查询可学习,带实例) https://pan.baidu.com/s/1L54VuFwCdKVnQGVc8vD1TQnwmj java手册 Ja ...

  2. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  3. [Java Basics] Stack, Heap, Constructor, I/O, Immutable, ClassLoader

    Good about Java: friendly syntax, memory management[GC can collect unreferenced memory resources], o ...

  4. Why string is immutable in Java ?

    This is an old yet still popular question. There are multiple reasons that String is designed to be ...

  5. 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 ...

  6. java代码之美(4)---guava之Immutable(不可变)集合

    Immutable(不可变)集合 一.概述 guava是google的一个库,弥补了java语言的很多方面的不足,很多在java8中已有实现,暂时不展开.Collections是jdk提供的一个工具类 ...

  7. JAVA不可变类(immutable)机制与String的不可变性--非常好.

    JAVA不可变类(immutable)机制与String的不可变性 https://www.cnblogs.com/jaylon/p/5721571.html

  8. Java同步注解:@ThreadSafe、@Immutable、@NotThreadSafe、@GuardedBy

    Java并发编程中,用到了一些专门为并发编程准备的 Annotation.主要包括三类: <dependency> <groupId>net.jcip</groupId& ...

  9. Java多线程编程模式实战指南(二):Immutable Object模式

    多线程共享变量的情况下,为了保证数据一致性,往往需要对这些变量的访问进行加锁.而锁本身又会带来一些问题和开销.Immutable Object模式使得我们可以在不使用锁的情况下,既保证共享变量访问的线 ...

随机推荐

  1. NTP 服务器配置

    1.yum安装ntp 1 yum install ntp* 2.更新时间 1 ntpdate 202.120.2.101 3.加入任务计划 1 2 crontab -e */10 * * * * nt ...

  2. hdu4669Mutiples on a circle

    http://acm.hdu.edu.cn/showproblem.php?pid=4669 这题各种错误都来了一遍  预处理一下第一个数作为尾数与相邻前面的数组成的数的余数  然后再与后面的结合求余 ...

  3. bzoj1069

    四边形的问题可以转化为三角形处理穷举对角线,然后处理上下两个三角形,旋转卡壳 ..] of double; q:..] of longint; l,r,i,j,k,t,n:longint; ans:d ...

  4. Failed to load unit 'PATM' (VERR_SSM_FIELD_NOT_CONSECUTIVE)

    今天打开虚拟机启动的时候报错:Failed to load unit 'PATM' (VERR_SSM_FIELD_NOT_CONSECUTIVE) 后来发现虚机处于休眠状态,所以在虚机上右键,然后清 ...

  5. Linux中的模式转换

    模式转换: 编辑-->输入: i: 在当前光标所在字符的前面,转为输入模式: a: 在当前光标所在字符的后面,转为输入模式: o: 在当前光标所在行的下方,新建一行,并转为输入模式: I:在当前 ...

  6. 【CSS3】Advanced8:CSS Backgrounds: Multiples, Size, and Origin

    1.Multiples,Size,and Origin eg:background-image:url(bg.png),url(bullet.png) 0 50% no-repeat,url(arro ...

  7. S3C2440触摸屏驱动实例开发讲解

    出处:http://www.embeddedlinux.org.cn/html/yingjianqudong/ 一.开发环境 主  机:VMWare--Fedora 9 开发板:Mini2440--6 ...

  8. Azure 虚拟机常见问题-上

    在 Azure 虚拟机上可以运行什么? 所有订户均可在 Azure 虚拟机上运行服务器软件.此外,MSDN 订户还可以访问由 Azure 提供的特定 Windows 客户端映像. 就服务器软件来说,你 ...

  9. Storm系列(十一)架构分析之Supervisor-管理Worker进程的事件线程

    处理流程:   方法原型: (defn sync-processes [supervisor]) 函数说明: Supervisor是一个supervisor-data对象. 从local-state中 ...

  10. SAP一句话入门 .

    SD是Sales and Distribution的简称.在SAP系统中,销售与分销模块处在供应链下游,关注从客户订单到向客户收款的全过程. SD模块中的Sales好理解,而Distribution却 ...