final在Java语言里面啥意思
final修饰一个类,那么这个类就是不可继承。string就是一个非常有名的被final修饰的类,不过他的更加有名的是“不可被修改”。
究竟什么是不可改变?string,大家可能都知道string是不可变,那么如果我们改变string呢,他确实变了,这个“他”已经是另外一块内存空间(地址)了;之前的String其实并没有消失,还在内存之前的空间(地址)里面保存的。到这里,你知道了string的不可变的涵义了;
1)一个实例一旦被定义了,其实是对于这个实例(对应的变量)的修改是创建另外一个实例,改变的其实某个变量的地址;至于原来的对象仍然存在,认识到“仍然存在”是关键,这样的设计模式可以通过“仍然存在”来保证其不可变性;
2)对象对于变量的使用本质是使用“内存地址”;
明白了这两点,就知道使用final特性的类,保证了其他对于某块“内存地址”(被final修饰的类)的内容的应用可以保证不变形。
public static void main(String[] args) {
testClass tc1 = new testClass();
  String aa = "55";
  tc1.name = aa;
  aa = "66";   System.out.println("tc1.name: " + tc1.name);
}
在这段代码里面,可以看到aa呈现的是“值”的特性,就是不变性。但是一个对象呈现成值得特性是怎么实现?final的定义只是不可被继承;string的不变性本质是通过:
 private final byte[] value; 
来实现的,内部的value字段是final,只能是在初始化的时候被赋值一次,就不再被修改。
 
final第三个用法是方法的参数修饰;这个用法是指在方法体内部这个变量是不可被修改的,否则会报一个编译时异常。
public class TestFinal {
/*
* 编译异常
public void testFinalparameter(final String name) {
name = "uu";
}
*/
}
 

String的不变性到final在java中用法的更多相关文章

  1. 探究final在java中的作用

    目录 一. final修饰变量 1. 基础: final修饰基本数据类型变量和引用数据类型变量. 2. 进阶: 被final修饰的常量在编译阶段会被放入常量池中 3. 探索: 为什么局部/匿名内部类在 ...

  2. Why String is Immutable or Final in Java

    The string is Immutable in Java because String objects are cached in String pool. Since cached Strin ...

  3. Mongdb的基本操作及java中用法

    Mongdb中所有数据以Bson(类似JSON)的格式存在,可以存储集合,map,二进制文件等多种数据类型. 数据库的常用操作 use [数据库名称];//有就选中,没有就添加并选中show dbs; ...

  4. (转)Java中的String为什么是不可变的? -- String源码分析

    背景:被问到很基础的知识点  string  自己答的很模糊 Java中的String为什么是不可变的? -- String源码分析 ps:最好去阅读原文 Java中的String为什么是不可变的 什 ...

  5. 为什么 String 在 Java 中是不可变的?

    我最喜欢的 Java 面试问题,很棘手,但同时也非常有用.一些面试者也常问这个问题,为什么 String 在 Java 中是 final 的.字符串在 Java 中是不可变的,因为 String 对象 ...

  6. 深入理解Java中的final关键字

    Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使 ...

  7. (转)深入理解Java中的final关键字

    转自:http://www.importnew.com/7553.html Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方 ...

  8. Java中static、this、super、final的用法

    一.          static 请先看下面这段程序: public class Hello{public static void main(String[] args){//(1)System. ...

  9. Java基础——深入理解Java中的final关键字(转载)

    Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使 ...

随机推荐

  1. Access规格

    属性 最大值 Microsoft Access 数据库 (.mdb) 文件大小 2G 字节减去系统对象所需的空间. 数据库中的对象个数 32,768 模块(包括“内含模块”属性为“是”的窗体和报表)  ...

  2. Matlab绘图基础——利用axes(坐标系图形对象)绘制重叠图像 及 一图多轴(一幅图绘制多个坐标轴)

    描述 axes在当前窗口中创建一个包含默认属性坐标系 axes('PropertyName',propertyvalue,...)创建坐标系时,同时指定它的一些属性,没有指定的使用DefaultAxe ...

  3. BZOJ 1875 【SDOI2009】 HH去散步

    题目链接:HH去散步 如果不考虑不能走上一次走的边的话,这道题就是一个矩乘的裸题. 现在有了这个条件其实也很好做.我们平常的矩阵都是按点建的,\(A_{i,j}\)表示从第\(i\)个点走到第\(j\ ...

  4. shell 交互式选择(select)

    新建文件 sudo vi test.sh 写入如下内容: #!/bin/bash echo "What is your favourite OS?" select var in & ...

  5. 使用 reshape2 重塑数据框

    我们已经学习了如何筛选.排序.合并和汇总数据框.这些操作只适用于行和列,然而有时候我们需要做一些更复杂的事情.例如,下面这段代码读取了一个数据集,包含了两种产品不同日期的质量和耐久性的测试结果:toy ...

  6. Java网络编程学习A轮_07_基于Buffer的Socket编程

    示例代码: https://github.com/gordonklg/study,socket module A. LineSeparate 基于 Buffer 实现逐行读取的 EchoServer ...

  7. npm汇总:npm命令 + 实用插件

    一.npm常用命令,以便查阅: npm install     //运行npm install可根据package.json的配置自动安装所有依赖包 npm uninstall   //卸载依赖,如n ...

  8. Rspec: everyday-rspec实操: 第9章 快速编写测试,编写快速的测试。

    Make it work, make it right, make it fast. 测试运行的时间.应用和测试组件的增长,速度会越来越慢,目标是保持代码的readable, maintainable ...

  9. bzoj1854: [Scoi2010]游戏 贪心

    lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性.并且每种装备最多只能使 ...

  10. C++常考面试题

    1 new/delete 与 malloc/free的区别 运算符是语言自身的特性,有固定的语义,编译器知道意味着什么,由编译器解释语义,生成相应的代码. 库函数是依赖于库的,一定程度上独立于语言的. ...