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. bzoj1625 / P2871 [USACO07DEC]手链Charm Bracelet

    P2871 [USACO07DEC]手链Charm Bracelet 裸01背包. 看到自己1年半前写的30分code.......菜的真实(捂脸) #include<iostream> ...

  2. 基于梯度场和Hessian特征值分别获得图像的方向场

    一.​我们想要求的方向场的定义为: 对于任意一点(x,y),该点的方向可以定义为其所在脊线(或谷线)位置的切线方向与水平轴之间的夹角: 将一条直线顺时针或逆时针旋转 180°,直线的方向保持不变. 因 ...

  3. 20145118 《Java程序设计》第5周学习总结 教材学习内容总结

    20145118 <Java程序设计>第5周学习总结 教材学习内容总结 1.Java中所有错误都会被打包成对象,可以通过try.catch语法对错误对象作处理,先执行try,如果出错则跳出 ...

  4. 探索解析微服务下的RabbitMQ

    概览 本文主要介绍如何使用RabbitMQ消息代理来实现分布式系统之间的通信,从而促进微服务的松耦合. RabbitMQ,也被称为开源消息代理,它支持多种消息协议,并且可以部署在分布式系统上.它轻量级 ...

  5. Java Spring-JdbcTemplate增删改查

    2017-11-11 21:13:13 Spring 框架中提供了对持久层技术支持的类 : JDBC : org.springframework.jdbc.core.support.JdbcDaoSu ...

  6. **优化--后端**: 计数缓存counter_cache; rack-mini-profiler(2300🌟) ; bullet(5000✨):侦测N+1query

    rack-mini-profiler 这个 gem,可以永远显示网页的加载时间.(2300✨)开发环境和产品环境都可以用.(生成非常详细的报告) development环境,直接使用gem 'rack ...

  7. rails安装使用版本控制器的原因。

    使用版本控制器的原因: 你没有系统根权限,所以你没有别的选择 你想要分开运行几个rails 系统 ,并且这几个rails有不同的Ruby版本.使用RVM就可以轻松做到. 没有什么新鲜的先安装xcode ...

  8. c++运算符优先级表

    优先级 操作符 描述 例子 结合性 1 () [] -> . :: ++ -- 调节优先级的括号操作符 数组下标访问操作符 通过指向对象的指针访问成员的操作符 通过对象本身访问成员的操作符 作用 ...

  9. Ubuntu下XTerm乱码问题的解决及XTerm的简单配置

    本人比较喜欢Ubuntu这个Linux的发行版,主要是安装程序插件什么的都比较方便,推荐新手使用,可以免去很多麻烦的配置,将注意力放在编程的学习上,当然如果是想专门学Linux的,还是推荐在Cento ...

  10. CentOS6.5系统服务

    服务名称 功能 默认 建议 备注说明 NetworkManager 用于自动连接网络,常用在Laptop上 开启 关闭 对服务器无用 abrt-ccpp   开启 自定 对服务器无用 abrt-oop ...