我对增量和减量运算符有疑问。我不明白为什么Java会给出这些输出。

x = 5;  y = 10;

System.out.println(z = y *= x++); // output is 50

x = 2; y = 3; z = 4;

System.out.println("Result ="+ z + y++ * x); // output is Result = 46

x = 5;

System.out.println( x++*x); // output is 30

x = 5;

System.out.println( x*x++); // output is 25

例如,在第二个println函数中,y乘以而不增加1,而在第三个函数中,x函数与x + 1乘。 据我所知,一元增和一元减运算符的优先级高于算术运算符,那么为什么第二个运算符不增加1(y ++ * x = 3 * 2 = 6)而为什么(y + 1)* x = 8呢?

您已经将运算符优先级与评估顺序混淆了。

如果仅优先考虑,那么为什么还要麻烦y++和++y? :)

对于第二行,如果之后在行中使用变量y,则y将获得值4。这与*优先于+的运算符的算术排序无关。 前递增运算符立即使用递增的值,而后递增运算符在执行操作后立即递增。

需要了解的内容:

后递增运算符(变量名后的++)返回变量的旧值,然后递增变量。因此,如果x是5,则表达式x++的计算结果为5,并且具有将x设置为6的副作用。

这个有点特别:

x = 2; y = 3; z = 4;

System.out.println("Result ="+ z + y++ * x); // output is Result = 46

请注意,此处使用了字符串连接。它先打印Result =,然后打印4,它是z的值,然后是y++ * x的值,是6。 46不是一个数字,它是一个来自两个表达式的4和6。

感谢您的评论。 我最了解。

x = 5;  y = 10;

System.out.println(z = y *= x++); // output is 50 -->z=y=y*x i.e, z=y=10*5 (now, after evaluation of the expression, x is incremented to 6)

x = 2; y = 3; z = 4;

System.out.println("Result ="+ z + y++ * x); // output is Result = 46 --> from Right to left . y++ * x happens first..So, 3 * 2 = 6 (now, y will be incremented to 4) then"Result =" +z (String) + number (y++ * z) will be concatenated as Strings.

x = 5;

System.out.println( x++*x); // output is 30 --> 5 * (5+1 i.e, x is already incremented to 6 when you do x++ so its like 5 *6 )

x = 5;

System.out.println( x*x++); // output is 25 -- > 5 * 5 (x will be incremented now)

我建议阅读本教程,我认为这将使用法-> Java运算符更加清晰。

让我们把它放在碎片上:

x = 5;  y = 10;

System.out.println(z = y *= x++);

在上面的代码中,您将y * = x ++的结果分配给z;这意味着y = y * x ++。现在,x ++将在乘法完成后求值。如果您希望它以前发生过,则应该使用++ x。

x = 2; y = 3; z = 4;

System.out.println("Result ="+ z + y++ * x); // output is Result = 46

在这种情况下,您可以将字符串与上述值连接起来;将首先进行乘法运算,然后再进行加法运算,直到最后才计算后增量。

其余示例与上述示例相似。运算符优先级是上面应用的规则,您可以使用此表查看评估它们的顺序:运算符优先级

您的第一个表达式z = y *= x++等于:

z=y=y*x;

x++;

您的第二个表达式+ z + y++ * x与此等效:

z +""+ (y*x) // here z = 4 and y*x is 6 which gives us 46.

同样,您可以找到第三和第四表达。

因为y++将首先评估y,然后递增。

相反,对于++y,增量发生在评估之前。

它们的优先级高于二进制运算符,但它们的取值为'x'。后递增的副作用不是优先考虑的部分。

y ++将在代码后向y加1。

++ y将在代码之前将y加1。

postfix- ++表示,该变量以其当前值求值,并且在对周围的表达式求值后,该变量递增。

java中的减_Java中的增量和减量运算符相关推荐

  1. java 时间加减_Java中时间加减的比较

    public class TestDate{ public static void main(String[] args){ try{ Date date=new Date(); DateFormat ...

  2. C++:后缀增量和减量运算符:++ 和 --

    C++:后缀增量和减量运算符:++ 和 -- 语法 备注 语法 postfix-expression ++ postfix-expression -- 备注 C++ 提供了前缀和后缀递增和递减运算符: ...

  3. java String如何回收_java中的垃圾回收

    原文-http://blog.csdn.net/zsuguangh/article/details/6429592 1. 垃圾回收的意义 在C++中,对象所占的内存在程序结束运行之前一直被占用,在明确 ...

  4. java 定义整数数组_JAVA中数组的正确定义方法是什么?

    数组是有序数据的集合,数组中的每个元素具有相同的数组名和下标来唯一地确定数组中的元素. §5.1一维数组 一.一维数组的定义 type arrayName[]; 其中类型(type)可以为Java中任 ...

  5. java gc回收机制_Java中的GC回收机制

    为什么要进行GC回收? 当我们新建一个对象时,系统就会为其分配一定的内存空间,而有时候新建的对象没有去使用时,不回收的话会极大浪费内存空间,造成系统效率低下. 什么时候进行GC回收? 1.当CPU空闲 ...

  6. java变量存储位置_java 中变量存储位置的区别

    [原文] 1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量 ...

  7. java可以多重继承吗_Java中的多重继承与组合vs继承

    java可以多重继承吗 有时我写了几篇有关Java继承,接口和组成的文章. 在这篇文章中,我们将研究多重继承,然后了解组成优于继承的好处. Java中的多重继承 多重继承是创建具有多个超类的单个类的能 ...

  8. java中有没有栈_Java中堆和栈有什么区别

    stack 和 heep 都是内存的一部分stack 空间小,速度比较快, 用来放对象的引用heep 大,一般所有创建的对象都放在这里.栈(stack):是一个先进后出的数据结构,通常用于保存方法(函 ...

  9. java 静态资源变量_Java中读取配置文件中的内容,并将其赋值给静态变量的方法...

    项目开发中某个功能需要抽取成方法写成一个工具类,提供给别人使用.写过工具类的人都知道,工具类中的方法一般都是静态方法,可以直接使用类名点方法名调用, 使用很方便,比如判断某个对象是否为空的方式Obje ...

最新文章

  1. 配置Tomcat和在Eclipse中创建Web工程
  2. c# 重写override
  3. 内存动态分配之realloc(),malloc(),calloc()与new运算符
  4. 快速上手SpyGlass——基本流程
  5. opencv4.5.0安装包_UG NX12.0 软件介绍(附安装包)
  6. golang 三种接口的定义方式
  7. 【Antlr】Antlr语法设计
  8. MixConv: Mixed Depthwise Convolutional Kernels
  9. 中彩体彩排列3彩票软件 解压缩软件
  10. 苏宁成立快递员节PK京东封杀快递,谁的做法更聪明?
  11. app软件怎么开发 盘点3种app制作方式
  12. java saxreader_java解析XML文件---SAXReader
  13. java裁剪缩放图片代码下载
  14. list去重及求两个list中元素的重复率
  15. php faker,Laravel的Faker的使用
  16. 原生js制作动画效果
  17. 【2016新年版】年度精品 XP,32/64位Win7,32/64位Win8,32/64位Win10系统
  18. python接入excel_在abaqus中使用python连接excel
  19. 机器学习-支持向量机SVM算法
  20. PHP连接操作sqlserver

热门文章

  1. B2B 手动客户端网络上传数据报错:由于目标机器积极拒绝,无法连接,解决办法
  2. Microsoft Teams会议文件无法下载或在线访问
  3. 技能梳理3@NODEMCU+串口屏+随机抽签+物理按键
  4. VB.NET学习思维导图
  5. 计算机清理垃圾文件丢失怎么恢复,电脑文件数据删除怎么恢复-互盾数据恢复软件...
  6. 刚进互联网公司做 JAVA 后端开发,基本上什么都不会该怎么办?我来告诉你
  7. D3D11与D3D9全屏/窗口化切换差异
  8. 虚拟机和物理机之间互ping【局域网内ping不通,防火墙规则更改(win7为例)】
  9. JAVA-JSON文件转excel文件
  10. kaliarp欺骗注入_利用 Kali Linux 进行 Arp 欺骗,实现局域网断网攻击