iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >java中a=a+1和a+=1的区别介绍
  • 239
分享到

java中a=a+1和a+=1的区别介绍

2024-04-02 19:04:59 239人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录java a=a+1和a+=1的区别测试用例调用的方法Java趣事a=a++和a=++a整个过程大致就是这样,来一幅图解释吧java a=a+1和a+=1的区别 测试用例调用的

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.Integer
byte 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

将常量 1 压入操作数栈。这个操作是 int 值为 1~5 的时候。如果是 -128~127 这个范围是用的 bipush x (x 为实际数值)。 -2^15~2^15-1 这个范围是使用的 sipush x 这个命令(同上)。 -2^31~2^31-1 这个范围是使用的 ldc 这个命令。

  • istore_1

弹出操作数栈顶的数(此时为 1)并赋值给局部变量第一个元素即索引为 1 的 a。局部变量是采用的数组形式,索引为 0 的是 main() 的参数 args 。

  • iload_1

把局部变量索引为 1 的变量(这里是 a)压入操作数栈,此时栈顶元素为 1 。

  • incc 1,1(关键)

把局部变量索引为 1 的数加 1 ,此时 a 的值为 2。注意:这个结果没有压入操作数栈。

  • istore_1

弹出栈顶的元素(此时为 1)赋值给 a ,覆盖 a 为 2 的结果。

整个过程大致就是这样,来一幅图解释吧

这个问题解决了,那么下面这段代码就好理解了。


int a = 1;
a = ++a;
System.out.println(a);

直接上截图吧

仔细对比一下,你会发现,两段代码的指令一模一样,但执行顺序有一点点区别, iinc 和 iload_1 这两个命令的执行顺序变化了一下位置。你还记得这两条指令的含义吗?你还记得文章最开始说的区别吗?

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: java中a=a+1和a+=1的区别介绍

本文链接: https://www.lsjlt.com/news/158899.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java中a=a+1和a+=1的区别介绍
    目录java a=a+1和a+=1的区别测试用例调用的方法Java趣事a=a++和a=++a整个过程大致就是这样,来一幅图解释吧java a=a+1和a+=1的区别 测试用例调用的...
    99+
    2024-04-02
  • java中a=a+1和a+=1的区别是什么
    本篇内容介绍了“java中a=a+1和a+=1的区别是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!java a=a+1和a+=1的区别...
    99+
    2023-06-21
  • c++中a--和--a的区别
    c++ 中,a-- 和 --a 都是递减运算符,区别在于递减时间:a-- 先赋值后递减,返回递减前值;--a 先递减后赋值,返回递减后值。使用时,--a 用于递减后使用,而 a-- 则用...
    99+
    2024-05-10
    c++
  • java中a++和++a有什么区别
    在Java中,a++和++a是一种增量运算符,都用于递增变量a的值。它们的区别在于:1. a++是后缀递增运算符,先使用a的当前值,...
    99+
    2023-10-12
    java
  • c++中++a和a++区别
    c++ 中 ++a 和 a++ 均是自增操作符,执行方式不同:++a(前置自增):使用变量前自增。a++(后置自增):使用变量后自增。 C++ 中 ++a 和 a++ 的区别 ++a ...
    99+
    2024-05-09
    c++
  • c语言中*a和a的区别
    在 c 语言中,a 是指向变量 a 内存地址的指针,而 a 是一个普通变量。a 存储 a 中的值,而 a 存储自身的值。a 通过解引用访问指向的值,而 a 直接访问自身的值。&a...
    99+
    2024-05-02
    c语言
  • c语言中++a和a++的区别
    在 c 语言中,自增运算符 ++a 和 a++ 的区别在于:++a(前置自增):先对变量进行递增,再返回更新后的值。a++(后置自增):先返回变量的原始值,再对变量进行递增。 C 语言...
    99+
    2024-04-27
    c语言
  • c语言中!a和a!的区别
    c语言中,!a和a!的区别在于:!a是逻辑非运算,将真值转为假,假值转为真;而a!是阶乘运算,计算数字a的阶乘。 c语言中!a和a!的区别 直接回答:在C语言中,!a表示逻辑非运算,而...
    99+
    2024-05-02
    c语言
  • c++中a++与++a的区别
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-14
  • c++中int a(n)和int a[n]的区别
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-14
  • C语言中++a和a++的区别解析
    c语言中++a和a++的区别:++a:先递增a的值,再返回递增后的值。a++:先返回a的当前值,再递增a的值。 C语言中++a和a++的区别解析 理解 C语言中的++a和a++都是单目...
    99+
    2024-04-03
    c语言 a++ ++a
  • javascript中如何让“a==1&&a==2&&a==3”成立
    这篇文章主要讲解了“javascript中如何让“a==1&&a==2&&a==3”成立”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“javascript中如...
    99+
    2023-07-05
  • c语言中a++与++a的区别
    c 语言中 a++ 和 ++a 的区别在于执行顺序:a++ 先使用后自增,++a 先自增后使用。 c语言中a++与++a的区别 在C语言中,a++ 和 ++a 都是后缀操作符,用于对变...
    99+
    2024-05-02
    c语言
  • c语言中'a'和"a"的区别
    'a' 和 "a" 在 c 语言中表示不同的字符常量:'a' 是一个字符,而 "a" 是包含一个字符的字符串。它们在类型、存储、用法、语法和示例中都有差异。 单引号 'a' 和双引号 ...
    99+
    2024-05-02
    c语言 字符串常量
  • c语言中数组名a和&a的详细介绍
    这篇文章主要讲解了“c语言中数组名a和&a的详细介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“c语言中数组名a和&a的详细介绍”吧!先说说a和&a的区别(有三点,...
    99+
    2023-06-17
  • java中1+1d/5和1+1/5的区别说明
    目录java 1+1d/5和1+1/5的区别主要区别就是数据类型不同计算1+1/2!+1/3!+...+1/20!之和java 1+1d/5和1+1/5的区别 主要区别就是数据类型不...
    99+
    2024-04-02
  • MySQL中的空值、null和(N/A)区别
    1 Empty Set和N/A 先讲Empty Set和 N/A,他们其实是一回事,MySQL中Empty Set是指当查询结果为空时,MySQL返回的结果集。 1.1 出现情况 一般情况下,由于一些...
    99+
    2023-09-27
    mysql 数据库
  • Python中列表索引A[:2]与A[:,2]的区别说明
    目录列表索引 A[ : 2 ]与A[ : , 2]区别创建一个列表访问列表中的值A[ : 2 ]与A[ : , 2]的区别python中[::]的含义[:-1][::-1][:,]列...
    99+
    2024-04-02
  • Java中system.exit(0)和system.exit(1)区别
    目录system.exit(0) 和 system.exit(1)区别:用法system.exit(0) 和 system.exit(1) java.lang.System源码,方法...
    99+
    2023-05-20
    system.exit(0) system.exit(1)
  • linux中cp-a和cp-r的区别有哪些
    这篇文章主要介绍“linux中cp-a和cp-r的区别有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“linux中cp-a和cp-r的区别有哪些”文章能帮助大家解决问题。linux中“cp-a”...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作