Java中可变与不可变类型
问题的起因是因为一道复习题。
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中可变与不可变类型相关推荐
- 【Groovy】Groovy 方法调用 ( Java 中函数参数是接口类型 | 函数参数是接口类型 可以 直接传递闭包 )
文章目录 一.Java 中函数参数是接口类型 二.函数参数是接口类型 可以 直接传递闭包 三.完整代码示例 一.Java 中函数参数是接口类型 在 Android 中经常使用如下形式的接口 : 定义一 ...
- Java中的8种原始类型
几年前,当我开始编辑Java Basics系列时,我认为将一些非常详细的信息拉到自己的帖子中是很有意义的. 这样,初学者的内容就更容易消化. 首先,我要介绍有关Java的8种原始类型的所有信息. Ja ...
- java整型转换为数组_基于java中byte数组与int类型的转换(两种方法)
java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法,我们都知道,在socket传输中,发送.者接收的数据都是 byte数组,但是int类型是4个byte组成的,如何把一个整形 ...
- Java中的两种异常类型及其区别?
Java中的两种异常类型及其区别? 参考文章: (1)Java中的两种异常类型及其区别? (2)https://www.cnblogs.com/zxfei/p/11182730.html (3)htt ...
- <随笔03>Java中的两种异常类型
<随笔03>Java中的两种异常类型 参考文章: (1)<随笔03>Java中的两种异常类型 (2)https://www.cnblogs.com/newlyfly/p/744 ...
- java中关于输出三角形图案类型题目的思路
java中关于输出三角形图案类型题目的思路 初学java,在学到循环相关的知识的时候,老师总会拿出一些图形打印相关的题目来让大家来练习,其中比较经典的就是如下类似题目. 这种图形类的题目,只要能做出其 ...
- Java中String是个什么类型?
Java中String是个什么类型 Java中的八大基本数据类型 String 是个什么类型 String常见的方法 Java中的八大基本数据类型 面试官的套路 Java中的数据类型分为四类 1.整型 ...
- JAVA中的八种基本类型
一.JAVA中的八种基本类型 1.数字类型(6种) ①byte: 占的位数:byte数据类型占八位: 最小值为:-128(-2^7): 最大值为:127(2^7-1): 默认值为:0: 作 ...
- java中byte数组与int类型的转换(两种方式)
java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法,我们都知道,在socket传输中,发送.者接收的数据都是 byte数组,但是int类型是4个byte组成的,如何把一个整形 ...
- java中char类型转换成int类型的两种方法
java中char类型转换成int类型的两种方法 方法一: 第一种利用Integer包装类的方法Integer.parseInt Copychar ch = '9'; if (Character.is ...
最新文章
- navicat对mysql的备份
- 涨点明显 | 全面刷新COCO检测和分割Top-1(附论文下载)
- python使用os和shutil模块进行文件创建,删除,移动,复制,重命名
- python伪装浏览器https_python伪造HTTP-REFERER
- 在 Docker 上运行一个 RESTful 风格的微服务
- linux cpu负载巡检,linux服务器巡检报告.doc
- js判断字符在另一个字符串中出现次数
- @PropertySource 解析 yml 配置文件,自定义解析 yaml 工厂类
- Visio2019中插入数学公式
- python支付系统开发_python实现银联支付和支付宝支付接入
- bat操作ftp上传下载命令
- 深入解析Apache NIFI的调度策略
- 程序员面试、算法研究、编程艺术、红黑树、数据挖掘5大经典原创系列集锦与总结
- int const *和int * const以及const int * const的区别
- Thrill: 基于C++的高性能分布式批处理算法
- HTML5期末大作业:网站——响应式网络游戏官网HTML+CSS+JavaScript ~ 学生HTML个人网页作业作品下载 ~ web课程设计网页规划与设计 ~大学生个人网站作业模板 ~简单个人网页
- matlab振动信号数据,Matlab在场地微振动信号数据处理中的应用
- 新纪元期货:投资远离骗局
- 经常用电脑辐射大怎么办?
- 记录一些拿来即用 高逼格的PPT配色方案