JAVA之浅谈i++与++i

本文讨论了i++和++i这两种自增运算符在不同情况下的行为差异,指出在简单应用中两者效率相同,但在处理自定义类时,++i由于避免了临时对象的创建,效率更高。
摘要由CSDN通过智能技术生成

两者的作用都是自增加1。 单独拿出来说的话,++i和i++,效果都是一样的,就是i=i+1。

int main()
{
    int i = 0;
    i++;
}
int main()
{
    int i = 0;
    ++i;
}

最后的结果都是1。

++i和i++的区别

单独使用的时候是没有区别的,但是如果当成运算符,就会有区别了!

我们用a=i++和a=++i举例说明

1.先说a=i++,这个运算的意思是先把i的值赋予a,然后在执行i=i+1;

当i初始等于3时,执行a=i++,最终结果a=3,i=4.

2.而a=++i,这个的意思是先执行i=i+1,然后在把i的值赋予a;

当i初始等于3时,执行a=++i,最终结果a=4,i=4.

所以说两者参与运算时的区别就是:

  1. a=i++ , a 返回原来的值a=i,i=i+1; a=++i , a 返回加1后的值,a=i+1,i=i+1。 也就是i++是先赋值,然后再自增;++i是先自增,后赋值。

  2. 第二个区别就是: i++ 不能作为左值,而++i可以。

左值(lvalue):

  1. 是一个表达式

  2. 代表内存中的一个存储空间

  3. 可以用在赋值运算符(=)的左侧,也可以用在赋值运算符(=)的右侧

右值(rvalue):

  1. 是一个表达式

  2. 代表的是一个值

  3. 不能用在赋值运算符(=)的左侧,只能用在赋值运算符(=)的右侧

i++和++i那个效率更高?

单独使用的时候,两者没有区别,参与运算时,也不过是语句的执行顺序换了,但是执行的步骤是一样的,效率都是一样的啊,没有什么不同啊?

(之前存在的说法是++i比i++的效率高,但是当编译器优化之后,两者简单应用时的效率确实是没有什么不同的)

但是,答案是两者效率在某些情况下仍有不同!

当我们考虑自定义类的时候,就不一样了。

i++是先用临时对象保存原来的对象,然后对原对象自增,再返回临时对象,不能作为左值;++i是直接对于原对象进行自增,然后返回原对象的引用,可以作为左值。

由于要生成临时对象,i++需要调用两次拷贝构造函数与析构函数(将原对象赋给临时对象一次,临时对象以值传递方式返回一次);

++i由于不用生成临时变量,且以引用方式返回,故没有构造与析构的开销,效率更高。

所以在使用类等自定义类型的时候,应尽量使用++i。

总结如下:

  1. 简单使用时,效率没有什么区别!

  2. 对于自定义类型,在类里使用的时候,++i的效率更高!

  • 10
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值