Java中i = i++的运算结果

在C/C++中,i = i++的运算结果是不确定的,但是在Java中,结果是确定的。

int i = 5;
i = i++;
System.out.println(i);

输出结果为:5

 

int i = 5;
i = ++i;
System.out.println(i);

输出结果为:6

 

使用javap反汇编后,汇编代码如下:

0: iconst_5		//常量5
1: istore_1 		//赋值 将常量5赋值给i
2: iload_1       	//读取
3: iinc      1, 1	//自加1
6: istore_1      	//赋值 将步骤2中读取的值赋值给i

 

0: iconst_5
1: istore_1
2: iinc      1, 1
5: iload_1
6: istore_1

 

看过反汇编后,再看下面的代码,结果就很容易理解了,结果为12

int i = 5;
i = i++ + ++i;
System.out.println(i);
时间: 2024-11-05 01:01:59

Java中i = i++的运算结果的相关文章

关于java中Double类型的运算精度问题

标题     在Java中实现浮点数的精确计算    AYellow(原作) 修改    关键字     Java 浮点数 精确计算   问题的提出:如果我们编译运行下面这个程序会看到什么?public class Test{    public static void main(String args[]){        System.out.println(0.05+0.01);        System.out.println(1.0-0.42);        System.out.

Java中的Bigdecimal类型运算

双精度浮点型变量double可以处理16位有效数.在实际应用中,需要对更大或者更小的数进行运算和处理.Java在java.math包中提 供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算.表5.7中列出了BigDecimal类的主要构造器和方法. 构造器  描 述 BigDecimal(int)创建一个具有参数所指定整数值的对象. BigDecimal(double)创建一个具有参数所指定双精度值的对象. BigDecimal(long)创建一个具有参数所指定长整数值的

Java 中的按位运算操作

我是木龙小驴,菜鸟一枚,这里发点文字,大家共同学习交流 位运算符无非就是<<  还有 >> 以及>>> 首先很久很久以前,那时候没有操作系统,只有电,计算机运算跟开关点灯差不多,亮代表开,不亮代表关,然后根据电压的高低来进行记录操作. 所以CPU进行所有处理都是二进制的,也就是1 和 0 组成,比如说十进制的1 就是0001 ,2就是0010,3就是0011. 二进制就是逢二进一,当一个数字,或者是字符,或者是什么东西(在计算机运算时都是二进制)如:0010 00

java中的按位与运算

1 package scanner; 2 3 public class SingleAnd { 4 5 public static void main(String[] args) { 6 7 int[] first = {10,15,8,5,0}; 8 9 int[] second = {4,8,1,2}; 10 11 int result = 0; 12 13 for(int i=0; i<first.length; i++){ 14 15 for(int j=0; j<second.le

Java中的按位运算

博客大搬家. 生活博客,https://ylxn.wordpress.com 一.位运算符简介: 1.按位与&.如果两个整形数据 a.b 对应位都是1,则结果位才为1,否则为0,(int 最大值0x7fffffff ): 1 int a = 0x7fffffff; 2 int b = 12; 3 int c = 0; 4 int aAndB = a&b; // aAndB is 12 5 int aAndC = a&c; // aAndC is 0 2.按位或|.如果两个操作数都是

java中的三目运算

直接上代码!复习基础! public static void main(String args[]){ int a , b; a = 10; b = (a == 1) ? 20: 30;//如果a等于1那么b就等于20,否则等于30 System.out.println( "Value of b is : " + b ); b = (a == 10) ? 20: 30; System.out.println( "Value of b is : " + b ); }}

java中的基本运算符、取余、逻辑运算符、逻辑运算符、位运算符、移位运算符

注意事项: 常量在编译的时候会赋值,变量在运行的时候才在内存中分配空间赋值. 赋值运算符 += -+ *+ %= \= 在java编译器会进行强制类型转换 取余: 在java中做取余运算的是时候,结果的正负号是取决于被除数. 逻辑运算符&且 |或 !非 ^异或 &&短路与 ||短路或 位运算符:直接操作二进制位的. & (与) 6 & 3 = 2 0000 0110 可以把1看成true & 0000 0011 0看成false --------------

Java中的简单浮点数类型float和double不能够进行精确运算

在java中,简单的浮点类型float和double是不能够进行运算.我们先看下面的两个程序代码: 代码一: import java.util.Scanner; class Circle { double radius; static final double PI=3.14; public Circle(){this.radius=0;} public Circle(double r){this.radius=r;} public double getArea(){return PI*this

java中byte转换int时为何与0xff进行与运算

在剖析该问题前请看如下代码 public static String bytes2HexString(byte[] b) {  String ret = "";  for (int i = 0; i < b.length; i++) {   String hex = Integer.toHexString(b[i] & 0xFF);   if (hex.length() == 1) {    hex = ''0'' + hex;   }   ret += hex.toUp