问题的起因是因为一道复习题。

final修饰的mutable对象,实际上代表的是s3这个引用是immutable的,他被定义出来就只能指向后面new出来的StringBuilder了。但是这不代表后面的StringBuilder不可变,想要修改的话还是能修改的。所以final是一个对管理者的限制。

尝试re-assign一个final修饰的关键字:

无法通过静态检查。但是a指向的对象仍然是mutable的。

final List<Person> a = new ArrayList<Person>();
List<Person> b= a;
a.add(new Person("Bill"));
System.out.println(a == b); //true

因此在上述题目中A选项应该是s3指向的椭圆为单线椭圆,链接两者的箭头为双线箭头。

另外,关于immutable的对象,因为在java中除了primitive类型和string所有的对象都是mutable的,我们自己可以定义一个immutable的对象,只要让这个类型除了creator以外,都不能访问它的数据域。

public class Student{private String name;private int ID;public Student(String name) {this.name = name;this.ID = name.hashCode();}public String getName() {return name;}public int getID() {return ID;}
}

总结,可变与不可变可以分为reference和types,reference可以通过final修饰,types要看它本身的性质,可变类型提供了mutator,不可变类型没有。

Java中可变与不可变类型相关推荐

  1. 【Groovy】Groovy 方法调用 ( Java 中函数参数是接口类型 | 函数参数是接口类型 可以 直接传递闭包 )

    文章目录 一.Java 中函数参数是接口类型 二.函数参数是接口类型 可以 直接传递闭包 三.完整代码示例 一.Java 中函数参数是接口类型 在 Android 中经常使用如下形式的接口 : 定义一 ...

  2. Java中的8种原始类型

    几年前,当我开始编辑Java Basics系列时,我认为将一些非常详细的信息拉到自己的帖子中是很有意义的. 这样,初学者的内容就更容易消化. 首先,我要介绍有关Java的8种原始类型的所有信息. Ja ...

  3. java整型转换为数组_基于java中byte数组与int类型的转换(两种方法)

    java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法,我们都知道,在socket传输中,发送.者接收的数据都是 byte数组,但是int类型是4个byte组成的,如何把一个整形 ...

  4. Java中的两种异常类型及其区别?

    Java中的两种异常类型及其区别? 参考文章: (1)Java中的两种异常类型及其区别? (2)https://www.cnblogs.com/zxfei/p/11182730.html (3)htt ...

  5. <随笔03>Java中的两种异常类型

    <随笔03>Java中的两种异常类型 参考文章: (1)<随笔03>Java中的两种异常类型 (2)https://www.cnblogs.com/newlyfly/p/744 ...

  6. java中关于输出三角形图案类型题目的思路

    java中关于输出三角形图案类型题目的思路 初学java,在学到循环相关的知识的时候,老师总会拿出一些图形打印相关的题目来让大家来练习,其中比较经典的就是如下类似题目. 这种图形类的题目,只要能做出其 ...

  7. Java中String是个什么类型?

    Java中String是个什么类型 Java中的八大基本数据类型 String 是个什么类型 String常见的方法 Java中的八大基本数据类型 面试官的套路 Java中的数据类型分为四类 1.整型 ...

  8. JAVA中的八种基本类型

    一.JAVA中的八种基本类型 1.数字类型(6种)   ①byte:     占的位数:byte数据类型占八位: 最小值为:-128(-2^7): 最大值为:127(2^7-1): 默认值为:0: 作 ...

  9. java中byte数组与int类型的转换(两种方式)

    java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法,我们都知道,在socket传输中,发送.者接收的数据都是 byte数组,但是int类型是4个byte组成的,如何把一个整形 ...

  10. java中char类型转换成int类型的两种方法

    java中char类型转换成int类型的两种方法 方法一: 第一种利用Integer包装类的方法Integer.parseInt Copychar ch = '9'; if (Character.is ...

最新文章

  1. navicat对mysql的备份
  2. 涨点明显 | 全面刷新COCO检测和分割Top-1(附论文下载)
  3. python使用os和shutil模块进行文件创建,删除,移动,复制,重命名
  4. python伪装浏览器https_python伪造HTTP-REFERER
  5. 在 Docker 上运行一个 RESTful 风格的微服务
  6. linux cpu负载巡检,linux服务器巡检报告.doc
  7. js判断字符在另一个字符串中出现次数
  8. @PropertySource 解析 yml 配置文件,自定义解析 yaml 工厂类
  9. Visio2019中插入数学公式
  10. python支付系统开发_python实现银联支付和支付宝支付接入
  11. bat操作ftp上传下载命令
  12. 深入解析Apache NIFI的调度策略
  13. 程序员面试、算法研究、编程艺术、红黑树、数据挖掘5大经典原创系列集锦与总结
  14. int const *和int * const以及const int * const的区别
  15. Thrill: 基于C++的高性能分布式批处理算法
  16. HTML5期末大作业:网站——响应式网络游戏官网HTML+CSS+JavaScript ~ 学生HTML个人网页作业作品下载 ~ web课程设计网页规划与设计 ~大学生个人网站作业模板 ~简单个人网页
  17. matlab振动信号数据,Matlab在场地微振动信号数据处理中的应用
  18. 新纪元期货:投资远离骗局
  19. 经常用电脑辐射大怎么办?
  20. 记录一些拿来即用 高逼格的PPT配色方案

热门文章

  1. C语言实现(封装、继承和多态)
  2. RVCT远程登录时报错的解决办法
  3. logger:一款管理日志的Python神器
  4. re.match()正则表达式
  5. C语言实现字符串倒置
  6. 阿里云redis公网连接
  7. STM32F4驱动42步进电机(采用驱动器)
  8. 随时来一杯鲜榨果汁,夏日解暑好装备,大宇榨汁机上手
  9. 美国计算机研究生学什么时候,2017-2018美国留学计算机科学IT专业硕士申请有多难?难于上青天?...
  10. 数据结构03:单链表逆置