首页 - 新闻世界 - 冰淇淋,等一分钟,沧海桑田

冰淇淋,等一分钟,沧海桑田

发布时间:2019-03-24  分类:新闻世界  作者:admin  浏览:274

作者:乔戈里 
公众号:程序员乔戈里





腾讯面试现场













——————




final 在 Java 中是一个保留的关键字,可以声明变量、方法、类。

什么是final高韶青离开中国的原因变量 / 类 / 方法?

任何变量前被 final 修饰就是 final 变量,定仁青拉姆义的类前被 final 修饰就是 final 类,任抠脚大叔何方法前被 final 修饰就是final方法。





当用 final 修饰一个类时,表明这个类不能被继承。你看看到图中箭头指向的地方,那句英文翻译过来就是不能继承 Cat 类。

如果把 final 关键字去掉,就可以了。你看这样就不会报错了!






下面这段话摘自《小李钱柜Java编程思想》第四版第143页:

“使用 final恶魔胆汁 方法bestialzoo的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率。在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法彭瓦过于庞大,可能看不到内嵌调用带来的任何性能提升。在最近的 Java 版本中,不老梁批评陈安之视频需要使用 final 方法进行这些优化了。“







变量被 final 修饰就是就是 final 变量,那么问题来了,final 变量和普通变量到底有啥区别?








  • 变量a指的是字符串常量池中的 xiaomeng2;
  • 变狗王李福根量 b 是 final 修饰的,变量 b 的值在编译时候就已经确定了它的确定值,换句话说就是提前知道了变量 b 的内容到底是个啥,相当于一个编译期常量;
  • 变量 c 是 b + 2得到的,由于 b 是一个常量,所以在使用 b 的时候直接相当have69于使用 b 的原始值(xi大草帽时代aomeng)来进行计算,所以 c 生成的也是一个常量,a 是常量,c 也是常量,都是 xiaomen六阳不举g2 而 Ja彩漫va 中常量池中只生成唯一的一个 xiaom厨娘翠花eng2 字符串,所以 a 和 c 是相等的!
  • d 是指向常量池中 xiaomeng,但由于 d 不是 final 修饰,也就是说在使用 d 的时候不会提前知道 d 的值是什么,所以在计算 e 的时候就不哆点电脑客户端下载一样了,e的话由于使用的是 d 的引用计算,变量d的访问却需要在运行时通智能谍变过链接来进行,所以这种计算会在堆上生成 xiaomeng2 ,所以最终 e 指向的是堆上的 xiaomeng2 , 所以 a 和肥臀 e 不相等。




















  • final方法比非final快一些
  • final关键字提高了性能。JVM和Java应用都会缓存final变量。
  • fi冰淇淋,等一分钟,沧海桑田nal变量可以安全的在多线程环境下进行共享,而不需要额外的同步开销。
  • 使用final关键字,刘中擎JVM会对方法、变14岁小学生量及类进行优化。



表情包出自:微博@不觉晓晓
PS:本故事纯属虚构

34张架构史上最全技术知识图谱