`
haitaoandroid
  • 浏览: 27710 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

一道笔试题的思考(一)

 
阅读更多

1:++操作为什么比+1操作高效,试从内存方面详细解释

都知道编译后++操作的指令比+1的少,所以肯定高效,但具体解释起来还要记住很多东西。++操作主要是通过字节码iinc指令来实现,其意思是:将指定的int型整型变量增加指定值。决定测试一下,以下代码:

                int i = 100;
		i++;
编译成字节码后:


bipush表示将单字节的常量值(-128~127)推送至栈顶,这里插播一句,java内存里面的栈是根据方法来分的,一个方法一个栈帧,一个栈帧里面有变量表,有操作数栈,有程序计数器等,上面的i是存在变量表里面第二个变量里面,因为第一个变量永远是this,bipush就是把常量池里面的100存入操作数栈的栈顶,istore_1指令的意思是:将操作数栈顶的int型数值存入第二个本地变量。所以经过第二步现在的i的值是100.现在看重点i++操作(即iinc 1,1),即将第二个变量(从0开始计数)加1.注意到这个操作是在变量表里面执行,没有通过操作数栈。

再看下面+1的代码:

                int i = 100;
		i = i+1;
编译成字节码后:


很明显,多了很多条指令,前面2句指令是一样的,但是从第三条开始,iload_1是把第二个局部变量存入操作数栈顶,iconst_1是把常量池中的常量1推送到栈顶,现在操作数栈从栈顶往下的数分别是1和100.iadd是把操作数栈顶的两个整数相加再压入栈顶,现在栈顶变为101,istore_1是把栈顶的元素存入局部变量表中的第二个变量。很容易发现,+1的操作比++的操作多了以操作数栈为中介的步骤,所以效率会比++低。

字节码这一块有很多东西,但是我个人觉得不一定要记忆,不懂的地方去翻看一下就行了,当时我还想到了一个问题,iinc操作是针对整型的,如果是long型呢?会有linc吗? 查了一下,没有这个指令,可是以下的代码是可以执行的,那么它后面的指令会是什么呢?

                long i = 0;
		i++;
编译成字节码后:


ldc2_w #5 跟bipush功能差不多,但是是把长整型推送至栈顶,后面的字节码跟上面第二种情况是一样的,只是把所有的整型操作换成了长整型操作(即把指令前面的i换成l了),并没有linc类似的指令。所以++操作和+1操作对于长整型是一样的,不信的话读者可以编译成字节码试试,对于long型,++操作跟+1操作编译成字节码是一样的。


分享到:
评论

相关推荐

    004m金蝶软件测试笔试题回忆版

    ### 004m金蝶软件测试笔试题知识点解析 #### 一、综合类知识点 **1. 职业倾向测试** - **知识点概述**:这类题目旨在评估应试者的个人兴趣、价值观以及性格特点等,从而判断其是否适合从事特定的职业。常见的职业...

    2019南京帆软软件公司校园招聘研发类笔试题

    总之,2019年南京帆软软件公司的研发类笔试题是一次综合性的考核,既检验了应聘者的逻辑推理能力,也测试了他们在算法理解和代码实现上的功底。这样的笔试对于选拔具有优秀编程技能和解决问题能力的开发者至关重要。

    菜鸟的自我修炼——阿里巴巴一道笔试题浅谈

    笔试题可能会设计一个简单的类结构,要求你实现特定功能或者分析代码行为。 3. **集合框架**:Java集合框架包括ArrayList、LinkedList、HashMap等,理解和运用这些数据结构解决问题是常见考题。比如,如何高效地...

    2012谷歌笔试题

    标题与描述中的关键词“2012谷歌笔试题”揭示了这一内容的核心是关于谷歌在2012年招聘过程中使用的笔试题目集。这不仅是对谷歌公司当时招聘流程的一个历史回顾,也是对IT行业求职者准备面试的重要参考资料。下面,...

    C++笔试题集锦

    《C++笔试题集锦》是一本专门为C++编程爱好者和求职者准备的资源,它汇集了46家公司的C++笔试题目,旨在帮助读者深入理解和掌握C++语言的核心概念、语法特性以及实际应用技巧。这份资料对于提升C++编程能力,特别是...

    微软笔试题总结 推理题 计算题

    【微软笔试题】通常用于测试应聘者的逻辑推理、问题解决和计算能力,这些能力在IT行业中至关重要。以下是对几个典型题目的分析: 1. **金条分段问题**:这是一道逻辑推理题,考察的是如何在有限的操作次数内公平...

    微软2015招聘笔试题

    【标题】"微软2015招聘笔试题"揭示了微软公司在2015年度针对求职者进行的技术筛选过程,这种笔试通常包含了编程、算法、系统设计、逻辑推理等多种技术领域的题目,旨在评估应聘者的综合技能和问题解决能力。...

    腾讯 招聘 笔试题 逻辑思维题

    例如,你可能需要解决一道关于条件语句、循环逻辑或算法设计的问题,这都需要清晰的逻辑思考。此外,在系统设计和项目管理中,良好的逻辑推理能力有助于构建合理的工作流程和解决复杂问题。 3. **填空题**: 填空...

    求职圣经:笔试常用逻辑思考题

    【笔试中的逻辑思考题解析】 在求职过程中,逻辑思考题是许多企业用来评估应聘者思维敏捷度和逻辑推理能力的重要工具。这些题目通常涉及到数学、逻辑推理、问题解决等多种元素,要求应聘者在有限时间内找到正确答案...

    广东移动2012暑期实习生招聘笔试题.pdf

    #### 一、笔试题结构与时间安排 广东移动2012年的暑期实习生招聘笔试题分为三大部分,总时长为三个小时,每部分考察的能力和内容各不相同。 - **第一部分**:中文IQ题,共计25题,每题2分,总计50分。这部分旨在...

    文书考试题及答案笔试题.doc

    从"文书考试题及答案笔试题.doc"中精选的题目,我们不仅能够体会到考试设计者对考查知识面广度和深度的追求,更能洞察到这些题目背后所蕴含的丰富知识要点。 言语理解与表达是语言学习的核心能力之一,此类题型要求...

    腾讯的笔试附加题(ACM试题)

    这是一道腾讯公司笔试中的附加题,原题来源于ACM(国际大学生程序设计竞赛)的一个问题。题目要求求解一个矩阵中最长递减路径的长度。该题目不仅考察了候选人的编程能力,还考察了解决复杂算法问题的能力。 ### ...

    0-交通银行历年笔试真题(12-15年).zip

    另外,对于每一个子文件,考生应仔细分析每一道题目,理解其背后的考核意图,查找解题方法和技巧。对于错误的题目,要深入思考错误原因,避免在正式考试中犯同样的错误。 总之,这份压缩包中的历年真题资源是备考...

    中国农业银行招聘考试笔试题目试卷历年考试真题.doc

    无领导小组讨论重在考察应聘者的团队合作能力和问题解决能力,求职者需要在讨论中展现出积极参与和理性思考的能力。半结构化面试则更侧重于了解应聘者的个人经历、职业规划以及对应聘岗位的理解,因此,求职者需要...

    华为校招硬件岗,电源岗笔试题8套

    ### 华为校招硬件岗,电源岗笔试题解析 #### 题目1:压敏电阻选型原则 **题目描述**:压敏电阻选型需满足:压敏电压 \(U_c >\) 最大持续工作电压 \(U_{max} >\) 额定工作电压 \(U_n\);绝不允许 \(U_c\) 低于被...

    中外名企面试笔试智力题大搜罗

    11. **Intel笔试题**: - 船相遇问题:两艘船会在出发地相遇,因为它们各自都在向对方的出发地前进,所以会相遇一次。 - 巴拿赫出生年份问题:设出生年份为x,则x^2 = x + 1945,解这个方程即可找到出生年份。 12...

    百度校园招聘笔试试题-未知年份岗位.doc

    1. **逻辑推理**:试题中提到的字母序列O,T,T,F的问题,这是一道逻辑推理题,考察的是对模式识别和规律分析的能力,通常在软件开发面试中会出现类似的逻辑思维测试。 2. **数学问题**:16个数字填入16格方框的问题...

    微软笔试面试整理题.txt

    综上所述,微软笔试面试是一个全面考察应聘者能力的过程,涉及技术基础、智力、英语能力和思考深度等多个方面。准备过程中,非计算机专业的应聘者应重点关注技术基础部分的学习,尤其是C/C++和数据结构相关知识;...

    中国移动2019招聘笔试完整真题及答案解析.pdf

    另一道题目谈到发展步伐与系统稳定及市场需求的关系,提示考生在考虑发展战略时,既要稳健前行,又不能过分保守,避免错失战略良机。正确选项为“B.固然保守”,意味着考生在答题时需要展现出对发展策略的辩证思考...

Global site tag (gtag.js) - Google Analytics