首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

javai++ 和 ++i的区别

今天同事扔给我两道面试题,由于我2年前就接触过这道题,所以没啥意思,我看完后扔到一个交流群里,回答这道题的绝大部分人竟然都答错了;很多人很清晰的知道这两道题想考察面试者对 i++ 和 ++i 的理解...(这是一道典型的看着非常简单的题,但是不少人还是会因为粗心栽跟头) 第一题: int a = 0; for (int i = 0; i < 99; i++) {...= 0; i < 99; i++) { b = ++ b; } System.out.println(b); 我估计会有不少人做错,因为群里有开发三四年的人...i++ 和 ++i 在理论上的区别是: i++:是先把i拿出来使用,然后再+1; ++i :是先把i+1,然后再拿出来使用; 答案见下: 第一题:a=0 第二题:b=99 再升级一下 第三题...Integer a = 0; int b = 0; for (int i = 0; i < 99; i++) { a = a ++;

1.2K30

漫画:奇怪,为什么在Java 2*(i*i) 比 2*i*i 快?

但是如果你把 2*i*i 替换成 2*(i*i),执行时间大概在 0.50s ~ 0.55s。 对这段程序的两个版本分别执行 15 次,得到的结果如下。...我们可以看出 2*(i*i) 比 2*i*i 快 。 我们来分别查看它的字节码,这里东哥给我推荐了一款好用的 IDEA 插件,叫做 jclasslib bytecode viewer。...2*i*i 的字节码如下。 2*(i*i) 的字节码如下。 我们可以发现除了字节码顺序不同外,没有其它异常,下一步该怎么办呢?...我这里就说一下结论,通过对比分析,我们会发现,2*i*i 进行了大量的堆栈操作,因此,需要保存大量的中间结果;而 2*(i*i) 只有少量的堆栈操作。...显而易见,2*(i*i) 比 2*i*i 快是由于 JIT 优化的结果。 -END-

76420

Java关于i=i++的问题解些

背景知识 JVM在方法体的操作指令,一部分是直接作用stack栈,也有一些部分是直接操作Local Variable(本地变量区/局部变量区)。...简单的介绍两个指令 ILOAD 将一个整数常量push到方法栈。...+ VS ++i 在平时的讲解,”i++“ 这条指定会在完成整个语句运算后执行,”++i“ 这条指令会在整个语句运算前执行。..., i); } 编译成指令后,其中i=i++的指令如下 ILOAD 1 IINC 1 1 ISTORE 1 应该有部分同学明白了,ILOAD指令先把i的原始值先被加载到了stack, 然后IINC指令将本地变量的...编译成指令后,其中i=i++的指令如下 IINC 1 1 ILOAD 1 ISTORE 1 IINC指令将本地变量i进行了+1操作, ILOAD指令先把i+1的值先被加载到了stack, ISTORE

63410

你真的了解 i++, ++ii+++++i 以及 i+++i++ 吗?

我想大部分都知道 i++ 和 ++i的区别,i++ 就是先拿i来使用,之后再自增加1,而++i则是先自增加1,在拿i来使用,例如对于下面这两个语句,我敢保证大部分人都会做: int i = 1; System.out.println...//把栈顶的元素弹出,并赋值给局部变量表位置为“1”的变量,此时指变量i。...这两句就相当于 int i = 1; //接下来执行第二行代码 ILOAD 1 //把局部变量表位置为“1”的变量加载到栈顶,即把i的值加载到栈顶 IINC 1 1 //直接把局部变量表位置为...4、执行 IINC 1 1 ,直接把局部变量表位置为“1”的变量加 1 ?...ICONST_1 ISTORE 1 IINC 1 1 //直接把局部变量表位置为“1”的变量加1 ILOAD 1 //把位置“1”的变量压到栈顶,此时栈顶的元素是 2 INVOKEVIRTUAL java

1.5K20

你真的了解 i++, ++ii+++++i 以及 i+++i++ 吗?

本文字数:2355字 阅读本文大概需要:6 分钟 我想大部分都知道 i++ 和 ++i的区别,i++ 就是先拿i来使用,之后再自增加1,而++i则是先自增加1,在拿i来使用,例如对于下面这两个语句,...//把栈顶的元素弹出,并赋值给局部变量表位置为“1”的变量,此时指变量i。...这两句就相当于 int i = 1; //接下来执行第二行代码 ILOAD 1 //把局部变量表位置为“1”的变量加载到栈顶,即把i的值加载到栈顶 IINC 1 1 //直接把局部变量表位置为...4、执行 IINC 1 1 ,直接把局部变量表位置为“1”的变量加 1 ?...ICONST_1 ISTORE 1 IINC 1 1 //直接把局部变量表位置为“1”的变量加1 ILOAD 1 //把位置“1”的变量压到栈顶,此时栈顶的元素是 2 INVOKEVIRTUAL java

2.1K20

【一起玩蛇】Python代码审计的那些器I

1、前言 作为【一起玩蛇】系列的文章,突发奇想到python代码审计。纵观目前主流的代码审计,关于审计PHP的文章很多,java代码的也逐渐增加,至于python相关的却相对较少。...Python代码审计资源包括但不仅限于: Python安全编码和代码审计(http://xxlegend.com/2015/07/30/Python%E5%AE%89%E5%85%A8%E7%BC%96%...如果不清楚漏洞,可以访问More Info继续查看并在搜索框搜索B101: http://docs.openstack.org/developer/bandit/plugins/assert_used.html...3.4 结果分析 查看终端界面返回的内容,主要是一些untrited_func_name、func,record_param等信息,结合源码判断不存在危险函数与参数。 ?...在平常的审计工作,不防用各个工具都跑一边,综合起来看结果。再加上人工参与审计,想必会事半功倍,毕竟python代码审计相对来说还算是稍微简单。

1.6K130
领券