`

i=i+1与i+=1的区别及效率

 
阅读更多

在做个java优化的PPT时,看到了i=i+1与i+=1的区别,在这之前还真没想到那么细。

1.x=x+1,x+=1及x++的效率哪个最高?为什么?

x=x+1最低,因为它的执行如下。

(1)读取右x的地址;

(2)x+1;

(3)读取左x的地址;

(4)将右值传给左边的x(编译器并不认为左右x的地址相同)。

x+=1其次,它的执行如下。

(1)读取x的地址;

(2)x+1;

(3)将得到的值传给x(因为x的地址已经读出)。

x++最高,它的执行如下。

(1)读取右x的地址;

(2)x自增1.

 

2.x=x+1,和 x+=1; 在什么情况下不成立 而且 x=x+1 是错误的; (类型隐式转换)

short x=1;
x+=1;
x=x+1; //因为 x是 short 类型 .当它+1 会自动转变成int 当是等于又 是 short 类型..所以会报错;

 

3.x=x+1,和 x+=1; 在什么情况下不成立 而且 x+=1 是错误的;
Object x="abc";
String y="def";
x+=y;
x=x+y

分享到:
评论

相关推荐

    谈谈Java中的i++

    这是和JVM的内存分配有关,JVM在处理这段带代码时,会先把i++的结果赋值给一个临时变量temp,然后再将这个临时变量的值赋值给i。即如下: int i = 0; int temp; // i = i++; int a = temp = i++;// 临时变量...

    Java经典算法20题

    接着用k+1继续尝试,直到原数被分解完毕。 **代码实现**: ```java public class PrimeFactorization { public static void main(String[] args) { int n = 90; System.out.print(n + " = "); decompose(n); }...

    java代码-i=3; a=i++; i+=a; \u6c42i=

    `i++` 表示先将 `i` 的当前值赋给 `a`,然后 `i` 的值增加 1。因此,`a` 的值会是 3(因为它是 `i` 在增加前的值),而 `i` 的新值则变成了 4。 然后,`i+=a;` 这一行是另一个复合赋值运算符的使用。`i+=a` 相当于 ...

    c++的左值右值 i++与++i的区别.docx

    C++ 中的左值和右值、i++ 与 ++i 的区别 在 C++ 编程语言中,左值(Lvalue)和右值(Rvalue)是两个重要的概念,它们在变量和表达式中的角色不同,理解这两个概念对于编写正确和高效的代码非常重要。 左值(Lvalue...

    浅析PHP中的i++与++i的区别及效率

    先看看基本区别: i++ :先在i所在的表达式中使用i的当前值,后让i加1 ++i :让i先加1,然后在i所在的表达式中使用i的新值 看一些视频教程里面写for循环的...先将 i 值加 1 (也就是 i=i+1 ),然后赋给变量 a (也就

    php中++i 与 i++ 的区别

    3. `++i` 与 `i++` 的比较: 在赋值语句中,两者的主要区别在于赋值发生的时间点。`++i` 会在赋值之前增加 `i`,而 `i++` 则会在赋值之后增加 `i`。这意味着如果你将自增操作符用于赋值给另一个变量,结果会有所...

    浅析PHP中的i++与++i的区分及效率_.docx

    PHP 中 i++ 和 ++i 的区分及效率浅析 PHP 中的 i++ 和 ++i 都是递增运算符,但它们的执行顺序和返回值不同。 i++ 运算符 i++ 运算符是后缀递增运算符,它的执行顺序如下: 1. 返回当前变量的值 2. 将变量的值加 ...

    JavaSE 面试题 (2).docx

    1、自增变量的理解与应用 在Java中,自增运算符(++)有两种用法:前缀自增(如:++i)和后缀自增(如:i++)。这两种操作符的区别在于它们对变量值的修改时机不同。 在给定的代码段中: ```java int i = 1; i = i++;...

    计算机编译原理课后习题及答案详细解析.pdf

    例如,表达式i的推导过程是E=>T=>F=>i,表达式i*i+i的推导是E=>E+T=>T+T=>T*F+T=>F*F+T=>i*F+T=>i*i+T=>i*i+F=>i*i+i,表达式i+i*i的推导是E=>E+T=>T+T=>F+T=>F+F=>i+F=>i+i,而表达式i+(i+i)的推导是E=>E+E=>E+T=>T...

    C语言 实验四 计数型循环结构及其测试.doc

    sum+=(i+1)*(i+1)*(j+2); printf("sum is:%d\n",sum); } ``` 该程序使用了嵌套的计数型循环结构,外循环变量i从1到20,内循环变量j从1到3。循环体中计算sum的值,并在最后输出sum的结果。 三、实验内容和步骤 1....

    100个经典c语言例题带答案.doc

    2. 使用三重循环遍历所有组合,即`for(i=1;i;i++) for(j=1;j;j++) for(k=1;k;k++)`,注意通过条件`i!=j&&i!=k&&j!=k`确保i、j、k互不相同。 程序源代码如下: ```c main(){ int i, j, k; printf("\n"); for(i=1;...

    JS for循环中i++ 和 ++i的区别介绍

    JS(JavaScript)是一种广泛应用于网页开发中的编程语言,它支持多种运算符,其中自增运算符(包括i++和++i)是经常被使用到的。在for循环中,这两种写法看似简单,实则蕴含着不同的逻辑和性能差异。因此,了解它们...

    如何实现C语言编程输出空心菱形

    观察表2,不难写出以下语句:if(j=i+1 || j=2*n-1-i)printf("*");elseprintf(" "); 然后,结合行列的循环关系即有:for(i=1;i;i++){for(j=1;j<=2*n-1-i;j++)if(j==i+1 || j==2*n-1-i)printf("*");elseprintf(" ");...

    C++面试题:++i和i++哪个效率高?

     2、我们自定的数据类型,++i效率高于i++,通过运算符重载来给大家说明这一点。 Operator Operator::operator++() { ++value; //内部成员变量 return *this; } Operator Operator::operator++(int) { ...

    C语言中++和--运算的一些问题

    1. **前缀与后缀的区别**: - 前缀形式(如 `++i`): 先自加/自减,再使用。 - 后缀形式(如 `i++`): 先使用,再自加/自减。 举例说明: - 如果 `i = 3`, 那么: - `j = ++i;` 后, `j` 和 `i` 的值均为4。 - `...

    Fibonacci C++实现

    fibArray[i % 2] = fibArray[(i - 1) % 2] + fibArray[(i - 2) % 2]; } return fibArray[n % 2]; } ``` 在这段代码中,我们使用一个大小为2的数组`fibArray`存储最后两个斐波那契数,然后根据需要更新数组的值...

    在C#中用while循环计算出完数

    while (j < i) // 对于每个数字i,检查1到i-1之间哪些数是i的因子 { if (i % j == 0) // 如果j是i的因子 { sum += j; // 将因子j累加到sum中 } j++; // 检查下一个可能的因子 } if (sum == i) // 如果所有...

    C语言编程跳水高手.doc

    x = (B == 2) * (A == 3) + (B == 2) * (E == 4) + (C == 1) * (D == 2) + (C == 5) * (D == 3) + (E == 4) * (A == 1); y = (B == 2) + (A == 3) + (B == 2) + (E == 4) + (C == 1) + (D == 2) + (C == 5) + (D =...

Global site tag (gtag.js) - Google Analytics