一直大概的知道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修饰的常量,在编译阶段会存入调用类的常量池中

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

浅谈final修饰的变量的更多相关文章

  1. final修饰的变量是引用不能变还是对象的内容不能变?

    int a=1;此时a是变量: StringBuffer a=new StringBuffer();此时a就是引用变量,可以说是a引用String对象,通过a来操作String 对象 final St ...

  2. final修饰的变量是引用不能改变还是引用的对象不能改变

    我们都知道final修饰变量时 会变为常量,但是使 用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变? 下面让我们来看这段代码: /** * 验证final修饰的变量是引用不能变, ...

  3. Java中Final修饰一个变量时,是引用不能变还是引用的对象不能变

    Java中,使用Final修饰一个变量,是引用不能变,还是引用对象不能变? 是引用对象的地址不能变,引用变量所指的对象的内容可以改变. final变量永远指向这个对象,是一个常量指针,而不是指向常量的 ...

  4. 浅谈linux中shell变量$#,$@,$0,$1,$2,$?的含义解释

    浅谈linux中shell变量$#,$@,$0,$1,$2,$?的含义解释 下面小编就为大家带来一篇浅谈linux中shell变量$#,$@,$0,$1,$2的含义解释.小编觉得挺不错的,现在就分享给 ...

  5. final修饰的变量引用不能变还是对象不可变

    两种情况:如果是基本数据类型,被final修饰的变量一旦初始化就不能改变:如果是引用数据类型的变量,初始化之后不能指向另外一个对象. 基本数据类型: package cn.yqg.day2; publ ...

  6. 并不是static final 修饰的变量都是编译期常量

    见代码 public class Test { public static void main(String[] args){ // 情况一 基本数据类型 //System.out.println(O ...

  7. 浅谈final关键字的用法

    1.final变量: 常和static一起使用,修饰成员变量或者本地变量.修饰后为常量,不可以再次初始化(再次引用),例如public static final String SUCCESS= &qu ...

  8. 浅谈Final

    Java关键字final有“这是无法改变的”或者“终态的”含义,final可以修饰非抽象类.非抽象类成员方法和变量. final类不能被继承,没有子类,final类中的方法默认是final的.fina ...

  9. final修饰的变量是引用不能改变,还是引用的对象不能改变???

    对于这个问题,我们不能只记结论,要拿实例说话,参看以下代码: public class Demo { public static void main(String[] args) { final St ...

随机推荐

  1. 使用Tensoflow实现梯度下降算法的一次线性拟合

    # Author Qian Chenglong import tensorflow as tf import numpy as np #生成100个随机数据点 x_date=np.random.ran ...

  2. Python2.7-csv

    csv模块,用于读写 csv 文件,常用 reader 和 writer 对象进行操作 1.模块的类 1.1 Dialect 对象,设置 csv 文件的各种格式,包括分隔符,引用符,转义符等 1.1. ...

  3. kubernetes 禁用虚拟内存 swapoff -a ----- 顺便复习sed 命令

    1.如果不关闭swap,就会在kubeadm初始化Kubernetes的时候报错,如下图: [ERROR Swap]: running with swap on is not supported. P ...

  4. 添加mysqld、apache服务到windows服务

    mysqld --install   “d:\apache\bin\httpd.exe” -k install

  5. HUE配置HIVE

    HIVE配置 修改hue.ini配置文件 [beeswax] hive_server_host=node1 hive_server_port= hive_conf_dir=/usr/hive-/con ...

  6. 2.1《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——重定向文件和添加文件

    回忆第一章节的内容,我们用echo命令输出莎士比亚的第一首十四行诗的第一行(Listing 6): $ echo "From fairest creatures we desire incr ...

  7. 20155211 网络攻防技术 Exp08 Web基础

    20155211 网络攻防技术 Exp08 Web基础 实践内容 Web前端HTML,能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML. We ...

  8. MiZ702学习笔记8——让MiZ702变身PC的方法

    首先你需要一个安装好的linux系统,这里我用的是Ubuntu的虚拟机.VMWare的话,选择较高版本的成功率会高些(当然根据自己电脑的配置进行选择). 打开Ubuntu的虚拟机,找到一个叫做Disk ...

  9. mfc 控件添加变量

    关联控件变量 初始化数据 一.关联控件变量 .为Edit控件关联数值类变量 变量名 m_edt1_s .为Edit控件关联控件类变量 变量名 m_edt1_ctl 二.控件变量的使用 HWND h=: ...

  10. TensorFlow训练MNIST数据集(3) —— 卷积神经网络

    前面两篇随笔实现的单层神经网络 和多层神经网络, 在MNIST测试集上的正确率分别约为90%和96%.在换用多层神经网络后,正确率已有很大的提升.这次将采用卷积神经网络继续进行测试. 1.模型基本结构 ...