一直大概的知道final关键字的作用,但是自己实际工作中却很少用,除非在声明一些常量值的时候,今天忽然自己在项目中用一个map进行存储一些值。一开始我只是用private修饰的,心里想的是如果final修饰的话,应该不能修改了。毕竟被final修饰的变量不可变。今天回家后,做了下面的尝试,彻底暴露出自己基础的不扎实。

final的作用

  • 被final修饰的类不可以被继承

  • 被final修饰的方法不可以被重写

  • 被final修饰的变量不可变

实战演示

1、首先看下面代码

public class FinalDemo {
private static final Map<String, Object> NAME = new HashMap<>(16);
private static final List<String> LIST = new ArrayList<>(10);
private static final String[] TYPE = new String[15];
private static final StringBuilder SB = new StringBuilder("22");
private static final StringBuffer SBU = new StringBuffer("22");
private static final String S = "44";
private static final int num = 44;
private static final String S1 = new String(); public void setName() {
NAME.put("1", "maomao");
LIST.add("11");
TYPE[0] = "1";
SB.append("12");
SBU.append("32");
System.out.println(NAME);
System.out.println(LIST);
System.out.println(Arrays.asList(TYPE));
System.out.println(SB.toString());
System.out.println(SBU.toString());
} public static void main(String[] args) {
FinalDemo finalDemo = new FinalDemo();
finalDemo.setName();
} }

2、运行结果

{1=maomao}
[11]
[1, null, null, null, null, null, null, null, null, null, null, null, null, null, null]
2212
2232

3、由此可见:

  • 用了map、list、数组、StringBuilder 、StringBuffer .它们的内容是可以修改的。
  • String和基本数据类型修饰的变量。同样final表示地址不能修改,但是地址的存储跟常量的值有关,给他重新赋值会指向另外一个对象,地址就改变了。

总结

被final修饰的变量,不可变的是变量的引用,而不是变量的内容

当然,final还有其他作用,比如:

  • 被final修饰的常量,在编译阶段会存入调用类的常量池中

这一块暂时不先探讨,现在自己水平还没到。还需要继续努力。

最新文章

  1. 再探@font-face及webIcon制作
  2. 【Network】高性能 UDP 服务应该怎么搞?
  3. M2: XAML Controls
  4. Xcode 7安装KSImageNamed失败解决方法
  5. C++学习35 模板中的函数式参数
  6. 慕课网-安卓工程师初养成-4-11 Java循环跳转语句之 break
  7. oc-18-继承
  8. SQLite入门与分析(四)---Page Cache之事务处理(2)
  9. Qt之高级网络操作(HTTP/FTP快速上手)Qt之QHttpPart和QHttpMultiPart
  10. html multiple select option 分组
  11. lambda表达式查询经验:IN 和groupby的使用
  12. 为什么a标签中使用img后,高度多了几个像素?
  13. Jenkins分布式部署配置
  14. scrapy splash 之一二
  15. JS_单个或多个文件上传_不支持单独修改
  16. pdf转eps后存在大片空白的处理
  17. YUV的数据格式
  18. copy other
  19. 如何对CentOS FTP服务配置
  20. 纯C++去雾算法

热门文章

  1. 基于window 7安装ubuntu 18.04双系统
  2. Segment Tree Beats 区间最值问题
  3. 大数据入门第二十一天——scala入门(二)并发编程Akka
  4. go语言之行--接口(interface)、反射(reflect)详解
  5. [Oracle]如何为数据库设置Event(eg: ORA-00235)
  6. 对C++多态的一点理解
  7. 洛咕 P3700 [CQOI2017]小Q的表格
  8. Centos7下python3安装ipython
  9. effective c++ 笔记 (30-31)
  10. eclipse中怎么找项目部署的路径和找编译后的class路径