java中a=a+1和a+=1的区别介绍
目录
- java a=a+1和a+=1的区别
- 测试用例调用的方法
- Java趣事a=a++和a=++a
java a=a+1和a+=1的区别
文章图片
测试用例调用的方法
public static void test(Object obj) {System.out.println(obj.getClass()); }
(1) 精度小于int(或long)的数值运算的时候都回被自动转换为int(或long)后进行计算,运算结果为
char i = 'a'; byte j = 2; test(i + j); //class java.lang.Integerbyte i1 = 1; short j1 = 2; test(i1 + j1); //class java.lang.Integer
(2)char、byte、short、int、long等整形数和float(或double)进行计算,会自动先提升float(double),在进行计算
int i2 = 1; float j2 = 1.5f; test(i2 + j2); //class java.lang.Float
(3)float与double进行运算时,会float会先提升为double
float i3 = 1.2f; double j3 = 1; test(i3 + j3); //class java.lang.Double
(4)a=a+1和a+=1的区别
文章图片
Java趣事a=a++和a=++a 如果问 a++ 和 ++a 的区别,估计很多都能回答上来。a++ 是先取 a 的值再自增 。而 ++a 刚好相反,是先自增再取 a 的值。这里有点编程基础都可以理解,不做过多解释,但在 Java 里面事情就真的这么简单吗?
int a = 1; a = a++; System.out.println(a);
凭借自己所学,在不测试的情况下,你能给出答案吗?
第一次看见这个问题的时候,想当然的认为答案是:2。但残酷的事实告诉我,答案是:1。当时面对这个结果我是无法接受的,网上疯狂搜索这个答案的解释。限于当时知识的水平,只记住了这个结论,至于推导这个结论那些指令,一个也不能理解。今天看书遇见数据操作,就又想起了这个问题,就根据自己的知识水平,重新推导这个过程。
首先用 IDEA 打开生成的 class 文件。
文章图片
很直观的告诉我们结果为 1 ,但这段代码只解释了 result,而没有解释 why ,继续用 javap -c 这个命令,结果如图。
文章图片
以第一次遇见这道题的水准,勉强能看懂第一步的 Java 代码,第二步的指令就彻底看不懂了。而现在我可以从这些指令里面分析结果了(这里需要分析的就前五行命令,后面指令为打印输出)。
iconst_1
istore_1
main()
的参数 args 。iload_1
incc 1,1(关键)
istore_1
整个过程大致就是这样,来一幅图解释吧。
文章图片
这个问题解决了,那么下面这段代码就好理解了。
int a = 1; a = ++a; System.out.println(a);
直接上截图吧
文章图片
仔细对比一下,你会发现,两段代码的指令一模一样,但执行顺序有一点点区别, iinc 和 iload_1 这两个命令的执行顺序变化了一下位置。你还记得这两条指令的含义吗?你还记得文章最开始说的区别吗?
【java中a=a+1和a+=1的区别介绍】以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
推荐阅读
- 热闹中的孤独
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- Shell-Bash变量与运算符
- JS中的各种宽高度定义及其应用
- 2021-02-17|2021-02-17 小儿按摩膻中穴-舒缓咳嗽
- 深入理解Go之generate
- 异地恋中,逐渐适应一个人到底意味着什么()
- 我眼中的佛系经纪人
- 《魔法科高中的劣等生》第26卷(Invasion篇)发售
- “成长”读书社群招募