一个关于 i++ 和 ++i 的面试题打趴了所有人

前言

都说大城市现在不好找工作,可小城市却也不好招人。

我们公司招了挺久都没招到,主管感到有些心累。

我提了点建议,是不是面试问的太深了,在这种小城市,能干活就行。

他说自己问的面试题都很浅显,如果答不上来说明基础太弱了。

我问了下面试题,然后我沉默了。

起因

起因就是我嘴欠问了下这个面试题:

i++ 和 ++i 有什么区别,谁的效率更高?并解释出原因。

没错,我竟然答不上来,贼尴尬,心想早知不问了。

主管有些意外,又问了几个别的同事,没一个答上来的。

他脸黑了,周四研发部例会的时候,干脆所有人问了一遍。

好吧,都是工作至少5年以上的Java程序员,没一个人答上来,五花八门的回答,全错。

然后大家就一致决定(主管决定),每周展开一次学习会,要补基础,保持团队学习热情,提升团队技术能力。

本来是为了招人,结果自己人被团灭。

正文

我挤出一个晚上不带娃的时间到处找资料,研究了下这个面试题,在此分享给大家,希望能有帮助。

1、i++ 和 ++i 有什么区别

首先,先看两个小例子:

image

image

到这里先停一下,大家自己思考半分钟,觉得打印结果是什么。

然后,我们来看看结果。

image

image

没错,第一个打印是 6 和 5,第二个打印是 6 和 6。

这就是他们的区别,解释下原因:

i++:这是后缀递增运算符,先将当前值赋给变量,然后再递增。

++i:这是前缀递增运算符,先递增变量的值,然后再赋给变量。

2、i++ 和 ++i 谁的效率高

这个问题我其实蒙对了,我说是一样高的,但是主管问我原因,我没答上来。

后来告诉我了答案,就是它们被编译器和JVM优化后的字节码是相同的,所以效率一样高。

3、字节码指令

然后我就去找了字节码指令的用法,将上面的案例以及两者效率是否一样进行了验证。

指令用法很简单,定位到class文件所在目录,使用 javap -verbose 命令执行即可。

1)、从字节码看区别

我们将前面那个案例,通过字节码指令输出到txt文件中。

image

image

在文档编辑器中找到main方法,对这两个字节码内容进行比对,发现确实有如下不同。

可以看到红框部分,刚好佐证了上面解释的区别,i++会先使用当前值,然后再递增;而++i会在递增之后立即使用新值,通过字节码看起来还是挺明显的。

image

2)、从字节码看谁的效率高

我们依然写个for循环的小例子来做验证。

image

image

将这两个类编译后的class通过字节码指令输出到txt中

image

image

接下来我们就可以比对下结果了

image

可以看到,main方法开始,从上到下的字节码是完全一样的,没任何不同。

所以,i++ 和 ++i 的效率本质是一样高的。

总结

其实,我相信很多人都见过这个面试题,甚至在笔试题当中也遇到过。

但工作了这么多年,即使是我,也只是剩下一点印象,也没有真正去研究一下这个简单的问题。

希望这篇文章,给大家有所帮助,也能启发大家如何去研究此类问题。

好了,今天的小知识你学会了吗?


如果喜欢,请点赞+关注↓↓↓,持续分享干货哦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/140086.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HUAWEI华为荣耀猎人游戏本V700 i7独显2060(FRD-WFD9)原装出厂Windows10系统工厂模式(含F10还原)

华为HONOR荣耀笔记本原厂系统镜像包,安装恢复时自动创建F10一键智能还原功能 链接:https://pan.baidu.com/s/1_px_3Fr9qEE6jExz1eKKKg?pwdk6uc 提取码:k6uc 系统自带所有驱动、出厂主题壁纸LOGO、Office办公软件、华为电脑管家等预装程序…

ChatGLM GPT原理介绍

图解GPT 除了BERT以外,另一个预训练模型GPT也给NLP领域带来了不少轰动,本节也对GPT做一个详细的讲解。 OpenAI提出的GPT-2模型(https://openai.com/blog/better-language-models/) 能够写出连贯并且高质量的文章,比之前语言模型效果好很多。GPT-2是基于Transformer搭建的,相…

SQL Server数据库中了360后缀勒索病毒怎么办,勒索病毒解密数据恢复

随着互联网的发展,网络安全问题日益凸显,勒索病毒已经成为当今数字威胁中的一大主要犯罪行为之一。其中,360后缀勒索病毒作为一种常见的数据库攻击形式,对数据库的安全性提出了极大挑战。近期我们收到很多企业的求助,企…

QT:使用行编辑器、文本编辑器、单选按钮、水平布局、垂直布局做一个小项目

widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QLineEdit> //行编辑器 #include <QTextEdit> //文本编辑器 #include <QRadioButton> //单选按钮class Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *pare…

项目进度网络图

概念 项目网络图是项目所有活动及其之间逻辑关系&#xff08;依赖关系&#xff09;的一个图解表示&#xff0c;并从左到右来表示项目的时间顺序。 可手工编制也可用计算机实现。可包括整个项目的全部细节&#xff0c;也可包含一个或多个概括性活动&#xff0c;还相应伴有一个…

uniapp中vue3使用uni.createSelectorQuery().in(this)报错

因为VUE3中使用setup没有this作用域&#xff0c;所以报错 解决办法&#xff1a;使用getCurrentInstance()方法获取组件实例 import { getCurrentInstance } from vue;const instance getCurrentInstance(); // 获取组件实例 const DOMArr uni.createSelectorQuery().in(ins…

智荟康午休课桌椅成为第十届中国慈善展览会公益亮点产品

第十届中国慈善展览会&#xff08;以下简称“慈展会”&#xff09;于9月15日至17日在深圳会展中心隆重举办&#xff0c;此次展会为期3天&#xff0c;主要围绕“共建现代化慈善&#xff0c;聚力高质量发展”的主题&#xff0c;重点聚焦聚力民生福祉&#xff0c;将打造“一展多元…

asrpro 天问BLOCK 总结

ASRPRO芯片信息 主频240MHz 640KByte SRAM 2-4M FLASH (https://haohaodada.com/jpeguploadfile/twen/ASRPRO/asr_pro_core.pdf) 下载 &#xff08;注意最好用好点的USB转TTL或是网方的下载器&#xff0c;否则会怀疑人生&#xff09; 下载程序步骤 安装VSCODE 在字符模式下&a…

CSDN热榜分析3:实现领域热榜的爬取

文章目录 领域热榜爬取函数领域热榜按钮功能实现 热榜分析系列&#xff1a; CSDN热榜分析&#x1f525; UI界面&#x1f525; 领域热榜 领域热榜爬取函数 CSDN热榜共有21个子领域&#xff0c;包括C、云原生、人工智能、前沿技术、软件工程、后端、Java、JavaScript、PHP、P…

程序员的快乐如此简单

最近在GitHub上发起了一个关于Beego框架的小插件的开源仓库&#xff0c;这一举动虽然看似微小&#xff0c;但其中的快乐和意义却是无法用言语表达的。 Beego是一个开源的Go语言Web框架&#xff0c;它采用了MVC架构模式&#xff0c;并集成了很多常用的功能和中间件。小插件是指…

手机也可以将声音转为字幕!支持中英日韩4种语言

快去看看你的华为手机有没有这个功能——AI字幕&#xff0c;可以将手机里的音频转换为文字&#xff08;以字幕形式展现&#xff0c;可保存在手机备忘录&#xff09; AI字幕有什么用途&#xff1f; 1. 在听觉不太好使的环境下&#xff0c;将音频信息转化到视觉&#xff08;文本…

C++中的Template

模板的概念 建立通用的模具&#xff0c;大大提高复用性 模板不可直接使用 函数模板 函数模板语法 函数模板作用&#xff1a; 建立一个通用函数&#xff0c;其函数返回值类型和形参类型可以不具体制定&#xff0c;用一个虚拟的类型来代表。 语法&#xff1a; template&l…

LeetCode_二叉树_中等_1448.统计二叉树中好节点的数目

目录 1.题目2.思路3.代码实现&#xff08;Java&#xff09; 1.题目 给你一棵根为 root 的二叉树&#xff0c;请你返回二叉树中好节点的数目。「好节点」X 定义为&#xff1a;从根到该节点 X 所经过的节点中&#xff0c;没有任何节点的值大于 X 的值。 示例 1&#xff1a; 输…

有名管道及其应用

创建FIFO文件 1.通过命令&#xff1a; mkfifo 文件名 2.通过函数: mkfifo #include <sys/types.h> #include <sys/stat.h> int mkfifo(const char *pathname, mode_t mode); 参数&#xff1a; -pathname&#xff1a;管道名称的路径 -mode&#xff1a;文件的权限&a…

linux、windows的pip一键永久换源[清华源、中科大、豆瓣、阿里云]

前言 本文概述&#xff1a;linux、windows操作系统一键将pip下载源永久设置为国内下载源&#xff0c;避免了使用临时源需要到处找镜像地址的麻烦。 作者介绍&#xff1a;作者本人是一名人工智能炼丹师&#xff0c;目前在实验室主要研究的方向为生成式模型&#xff0c;对其它方向…

SpringBoot中xml映射文件

1.规范 说明&#xff1a;XML映射文件的名称与Mapper接口名称一致&#xff0c;并且将XML映射文件和Mapper接口放置在相同包下&#xff08;同包同名&#xff09;。 xML映射文件的namespace属性为Mapper接口全类名一致。 XML映射文件中sql语句的id与Mapper接口中的方法名一致&…

谷歌浏览器jsonView插件安装与使用

1、打开 https://github.com &#xff1b; 2、搜索 jsonView 链接&#xff1a;https://gitee.com/wangl2020/chrome_JSONVue 3、选择需要的插件我是选这个&#xff1b; 4、点击【Download Zip】&#xff0c;插件下载完成&#xff0c;解压缩到相应目录&#xff08;D:\Downloa…

pycharm 中package, directory, sources root, resources root的区别

【遇到的问题】 导入yolov5中有utils文件&#xff0c;自己的代码中也有utils文件&#xff0c;使得yolov5中的这部分引用出错了。 【解决方案】 单独建立detection文件夹&#xff0c;把检测相关的都放在这里&#xff0c;yolov5是github上拉取的源码&#xff0c;发现yolov5中fr…

爬虫获取静态网页数据

自动爬取网页数据 正常情况下是我们使用浏览器输入指定url&#xff0c;对服务器发送访问请求&#xff0c;服务器返回请求信息&#xff0c;浏览器进行解析为我们看到的界面&#xff0c;爬虫就是使用python脚本取代正常的浏览器&#xff0c;获取相应服务器的返回请求信息&#x…

6 年大厂程序员跟你聊聊,算法其实没那么难,要怎么准备比较好

说起算法&#xff0c;许多程序员都会一顿哀嚎&#xff0c;为啥面试要靠算法这个东西。不过这个不是咱们讨论的重点。&#xff08;我们无法改变这种现状&#xff0c;那就改变自己&#xff09; 今天&#xff0c;我们一起来聊一下&#xff0c;程序员面试的时候该如何准备算法。 …