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. java第八天

    p41~p45: 1.区别前缀式与后缀式. public class Test { public static void main(String[] args) { int i = 1; System ...

  2. 从0开始学习 GITHUB 系列之「向GITHUB 提交代码」【转】

    本文转载自:http://stormzhang.com/github/2016/06/04/learn-github-from-zero4/ 版权声明:本文为 stormzhang 原创文章,可以随意 ...

  3. java中static关键字的使用

    知识点:java中,static关键字修饰类的变量.方法.代码块.内部类 场景:我们在创建类的方法和变量时,如果这个类在创建多个对象时,共用同一个属性或者方法,就可以使用static关键字修饰,因为s ...

  4. [fastjson] - fastjson中 JSONObject 和 JSONArray

    /** * 对jsonObject对象进行key的获取 * @param jsonObject */ public ArrayList<String> jsonKeyRecursion(J ...

  5. UVa 10791 最小公倍数的最小和(唯一分解定理)

    https://vjudge.net/problem/UVA-10791 题意: 输入整数n,求至少两个正整数,使得它们的最小公倍数为n,且这些整数的和最小. 思路: 首先对n进行质因数分解,举个例子 ...

  6. python 日期的减法

    from datetime import date a = date(,,) b = date(,,) print(b-a)

  7. Hystrix熔断机制原理剖析

    一.前言 在分布式系统架构中多个系统之间通常是通过远程RPC调用进行通信,也就是 A 系统调用 B 系统服务,B 系统调用 C 系统的服务.当尾部应用 C 发生故障而系统 B 没有服务降级时候可能会导 ...

  8. Linux命令详解-info

    info是一种文档格式,也是阅读此格式文档的阅读器:我们常用它来查看Linux命令的info文档.它以主题的形式把几个命令组织在一起,以便于我们阅读:在主题内以node(节点)的形式把本主题的几个命令 ...

  9. JS object(对象)的学习汇总

    Object(对象)是在所有的编程语言中都十分重要的一个概念,对于事物我们可以把他们看作是一个对象,而每一个事物都有自己的表示的属性和对于某一信息作出的相应的操作.而这些东西就变成了事物的属性和方法. ...

  10. IIS上部署DotNet Core程序

    1.安装托管捆绑包 https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/iis/index?view=aspnetcore-2.1 ...