云漫圈 | 腾讯面试,我竟然输给了final关键字
戳蓝字“CSDN云计算”关注我们哦!
作者:乔戈里
来源:程序员乔戈里
腾讯面试现场
——————
final 在 Java 中是一个保留的关键字,可以声明变量、方法、类。
什么是final变量 / 类 / 方法?
任何变量前被 final 修饰就是 final 变量,定义的类前被 final 修饰就是 final 类,任何方法前被 final 修饰就是final方法。
当用 final 修饰一个类时,表明这个类不能被继承。你看看到图中箭头指向的地方,那句英文翻译过来就是不能继承 Cat 类。
如果把 final 关键字去掉,就可以了。你看这样就不会报错了!
下面这段话摘自《Java编程思想》第四版第143页:
“使用 final 方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率。在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升。在最近的 Java 版本中,不需要使用 final 方法进行这些优化了。“
变量被 final 修饰就是就是 final 变量,那么问题来了,final 变量和普通变量到底有啥区别?
public class Main { public static void main(String[] args) { String a = "xiaomeng2"; final String b = "xiaomeng"; String d = "xiaomeng"; String c = b + 2; String e = d + 2; System.out.println((a == c)); System.out.println((a == e)); }}
变量a指的是字符串常量池中的 xiaomeng2;
变量 b 是 final 修饰的,变量 b 的值在编译时候就已经确定了它的确定值,换句话说就是提前知道了变量 b 的内容到底是个啥,相当于一个编译期常量;
变量 c 是 b + 2得到的,由于 b 是一个常量,所以在使用 b 的时候直接相当于使用 b 的原始值(xiaomeng)来进行计算,所以 c 生成的也是一个常量,a 是常量,c 也是常量,都是 xiaomeng2 而 Java 中常量池中只生成唯一的一个 xiaomeng2 字符串,所以 a 和 c 是相等的!
d 是指向常量池中 xiaomeng,但由于 d 不是 final 修饰,也就是说在使用 d 的时候不会提前知道 d 的值是什么,所以在计算 e 的时候就不一样了,e的话由于使用的是 d 的引用计算,变量d的访问却需要在运行时通过链接来进行,所以这种计算会在堆上生成 xiaomeng2 ,所以最终 e 指向的是堆上的 xiaomeng2 , 所以 a 和 e 不相等。
final方法比非final快一些
final关键字提高了性能。JVM和Java应用都会缓存final变量。
final变量可以安全的在多线程环境下进行共享,而不需要额外的同步开销。
使用final关键字,JVM会对方法、变量及类进行优化。
表情包出自:微博@不觉晓晓
PS:本故事纯属虚构
—————END—————
1.微信群:
添加小编微信:color_ld,备注“进群+姓名+公司职位”即可,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!
2.征稿:
投稿邮箱:liudan@csdn.net;微信号:color_ld。请备注投稿+姓名+公司职位。
推荐阅读
官宣!张小龙史上最长演讲 4小时3万字完整版回应微信的一切
Spark+Alluxio性能调优十大技巧
有问有答 | 容器精华问答,如何玩转容器服务?
Java 12 要来了!
“微信之父”张小龙:我没去过龙泉寺!
代码“大换血”,以太坊能耗将减少99%背后的故事
从云计算到AI:NetApp的数据网络转型之道
点击“阅读原文”,打开 CSDN App 阅读更贴心!
喜欢就点击“好看”吧!
云漫圈 | 腾讯面试,我竟然输给了final关键字相关推荐
- 面试:一文搞懂 final 关键字的作用
前言 Java语言支持的变量类型有: 类变量:独立于方法之外的变量,用 static 修饰. 实例变量:独立于方法之外的变量,不过没有 static 修饰. 局部变量:类的方法中的变量. 实例代码: ...
- 腾讯面试官这样问我二叉树,我刚好都会 | 原力计划
作者 | 天才程序YUAN 责编 | 夕颜 封图 | CSDN下载自视觉中国 出品 | CSDN(ID:CSDNnews) 前记 上周我投递出了简历,岗位是后端开发工程师.这周腾讯面试官给我进行了视频 ...
- 腾讯面试--测试工程师社会招聘面试经历
今天腾讯网上预约社会招聘,我是前天才看到这条消息,前天投了简历,还叫别人内推了我一把,但是悲剧的我把简历上的号码写成了原来在北京的号码,所以我也不知道是别人觉得我简历不合适还是因为联系不上我所以没有邀 ...
- 腾讯面试--测试工程师职位
今天腾讯网上预约社会招聘,我是前天才看到这条消息,前天投了简历,还叫别人内推了我一把,但是悲剧的我把简历上的号码写成了原来在北京的号码,所以我也不知道是别人觉得我简历不合适还是因为联系不上我所以没有邀 ...
- 腾讯面试:《警察抓小偷逻辑题》
首先:欢迎各位学习java和大数据的程序员朋友们加入Java交流学习群: 721506929群里提供免费的架构学习资料,直播讲解,讲师都是有着十几年阿里java开发经验的大牛,欢迎各位前来围观学习. ...
- 深度数据对比分析:阿里云服务器和腾讯云服务器那家好?
服务器具有维护成本低,安全稳定,高可扩展性和 7 X 24 小时的售后支持的优势,因此云服务器成为中小企业建站的首要选择.国内的云服务器竞争也进入了跑马圈地的时代,以阿里云.腾讯云.百度云三大BAT为 ...
- 去腾讯面试,直接让人出门左拐 :幂等性都不知道!
Hollis的新书限时折扣中,一本深入讲解Java基础的干货笔记! 链接:mydlq.club/article/94 鼓励大家经常去面试,让市场来检验自己到底有几斤几两,保持危机感. 最近,一位读者说 ...
- 多角度对比分析阿里云服务器和腾讯云服务器那个好?
本文转载自云期刊,原文地址:https://www.yunqikan.cn/2246.html 云服务器具有维护成本低,安全稳定,高可扩展性和 7 X 24 小时的售后支持的优势,因此云服务器成为中小 ...
- 深度全面对比分析:阿里云服务器和腾讯云服务器那家好?
目录 发展历程 主要产品 性能评测 产品价格 售后服务 云服务器具有维护成本低,安全稳定,高可扩展性和 7 X 24 小时的售后支持的优势,因此云服务器成为中小企业建站的首要选择.国内的云服务器竞争也 ...
最新文章
- 扩展JavaScript的时候,千万要保留其原来的所有功能
- mybatis使用foreach实现sql的in查询
- 中国半光纸市场供需形势分析及运行环境研究报告2021年版
- 对管理学的认识 知乎摘抄
- php连接mysql的区别吗_php连接mysql之mysql_connect()与mysqli_connect()的区别
- ORA-39083: + ORA-00439: 未启用功能
- duilib各种布局的作用,相对布局与绝对布局的的意义与用法
- Hadoop核心生态
- 如何得到所有子对象_对象可能会迟到,但它永远不会缺席
- “偷师腾讯”,苹果要分游戏这杯羹!| 畅言
- [转]Android中在SurfaceView上高效绘图
- python滑稽脸程序
- cad在服务器那个文件夹,CAD存放文件的路径默认在哪里
- Python中filter筛选函数匿名参数问题
- android开发一款app的流程
- 服务器pcb维修方法,电路板维修的方法与口诀
- 毕业设计-基于机器视觉的车型识别系统
- JavaScript中onload和unload用法
- 神经网络、目标检测学习
- python里使用协程和StreamReader、StreamWriter来创建echo服务端
热门文章
- pmbok第七版_PMBOK第七版要来了!都有哪些变化?你准备好了么?
- 北大光华教授孟涓涓:数据时代,从3个层面看个人隐私问题
- 知乎高赞:有哪些值得刻意练习的心态?
- 春招已近,这份GitHub万星的ML算法面试大全请收下
- php7改进,关注一下:PHP 7.3.7 正式发布 改进、修复的地方不少哦
- 使用java实现面向对象编程第二章_java面向对象编程——第二章 java基础语法
- 爬虫遇到路径转换的解决方案
- 埃森哲携手阿里云,采用K8s容器云服务为客户提供无限弹性
- No.1-Apache IoTDB 随笔 - Time Series DBMS 综述
- 【数据湖加速篇】 —— 数据湖结构化数据优化与查询加速方案