Java与C++的自增减运算

3 篇文章 0 订阅

Java与C++的自增减分析

例1:

//Java运行环境
int i=10,i1;
i=i++;
System.out.println(i);
i=++i;
System.out.println(i);

i=10;
i1=i++;
System.out.println(i1);
i1=++i;
System.out.println(i1);
//C++6.0运行环境
int a=10,i1;
a=a++;
printf("%d\t",a);
a=++a;
printf("%d\t",a);

a=10;
i1=++a;
printf("%d\t",i1);
i1=++a;
printf("%d\t",i1);

输出结果:

//Java
10		11		10		12		请按任意键继续. . .
//C++
11      12      11      12      Press any key to continue
首先导致他们区别的原因是:Java是面向对象的编程语言,每一次引用变量都会为其开辟一块新的内存,为其赋值。
C++是面向过程的编程语言,任何变量在某一时刻的值一定。

对于(++a),Java和c++都一致,都是先自增再用于运算。(a++)都是先创建临时变量保存当下变量数值,用于计算然后再自增(但其不同点也在于此,后自增是后到什么时候)。

我们先分析一下Java环境里的自增减:
Java中有一个机制:中间变量缓存机制
对于a=a++可以分解如下:

temp = a;
a = a + 1;
a = temp;

Java中后自增是创建临时变量用于计算,然后再自增变量,如果此时给本身赋值,则会造就了一个java面试可能遇到的问题:

public static void main(String[] args)
{ 
        int j = 0; 
        for(int i = 0; i < 100; i++) 
            j = j++; 
        System.out.println(j); 
 } 

该例运行结果为零。
例2:
为了直观,省略定义,所有语句执行前均隐含条件重新给a赋值为10,所有语句执行后均输出一次。

	a=10;
   a=(a++)+(a++)+(a++);
   a=(a++)+(a++);
   a=(a++);
   i1=(a++)+(a++)+(a++);
   i1=(a++)+(a++);
   i1=(a++);
   
   a=(++a)+(++a)+(++a);
   a=(++a)+(++a);
   a=(++a);
   i1=(++a)+(++a)+(++a);
   i1=(++a)+(++a);
   i1=(++a);
   
   a=(a++)+(a++)+(++a);
   a=(a++)+(a++);
   i1=(a++)+(a++)+(++a);
   i1=(a++)+(a++);

   a=(++a)+(a++)+(a++);
   a=(++a)+(a++);
   i1=(++a)+(a++)+(a++);
   i1=(++a)+(a++);
//C++环境 												   //Java环境
33	22	11	30	20	10                                     33	21	10	33	21	10

37	24	11	37	24	11                                     36	23	11	36	23	11

33	22	31	20                                             34	21	34	21

35	23	33	22                                             34	22	34	22
Press any key to continue                                  请按任意键继续. . .

下图解释运算顺序及先后(Java省略)
在这里插入图片描述
分析心得:运算遵循自左向右的顺序,注意运算符的结合性。Java中运算是逐变量赋值并进行运算,C++中单目运算符++a先运算,给双目运算赋值(此时要保证变量值的唯一性),运算结束,赋值,再计算a++(这句有些错误应该,这样是符合结果的,还望更准确的解释,也许是c的最终赋值元素不同)。
例3

//C++
int a = 10;
a+=(a++)+(++a);
a=(a++)+(++a)+a;
a+=(a++);
i=a+(a++)+(++a);
i=(a++)+(++a)+a;
i=a+(a++);
//C++	34	34	21	31	33	20
//Java  32	34	20	32	34	20
请按任意键继续. . .

此例为了分析自增减运算和运算顺序的关系
分析过程:

c++:                                                       Java:
(a=a+(11+11)=(11+22))+1                                    a=(10+10)+12                   
(a=(11+11)+11)+1                                           a=(10+12)+12
(a=(10+10))+1                                              a=10+10
i=(10+10)+11                                               i=(10+10)+12
i=(11+11)+11                                               i=(10+12)+12
i=(10+10)                                                  i=10+10
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值