java 前置_Java中的前置++和后置++的理解

前言

在C、C++等编程语言中都会存在i++,++i,在实际运用中我们总能记住一句话==i++(后置++)是先使用在+1,而++i(前置++)是先自增再使用==。但是在一些很烧脑的场合,这种规律就会“失效”。

本文会首先简单的介绍下前置和后置++在一些场合的实际应用,可以看到的是合理的使用++会使得代码简洁不少。

++前置后置的实际使用

package com.dimple.javabase;

import java.util.Arrays;

/**

*@program: JavaSEProject

*@description: 测试++运算符

*@author: Dimple

*@create: 2018-08-14 16:46

**/

public class AddOpt {

public static void main(String[] args) {

int i = 0;

String[] people = {"Dennis Ritchie", "Bjarne Stroustrup", "James Gosling"};

System.out.println(Arrays.asList(people).toString());

System.out.println("preposition ++");

System.out.println(" before operation···");

System.out.println(" i= "+i);

System.out.println(" "+people[i++]);

System.out.println(" after operation···");

System.out.println(" i= "+i);

System.out.println("postposition ++");

i = 0;

System.out.println(" before operation···");

System.out.println(" i= "+i);

System.out.println(" "+people[++i]);

System.out.println(" after operation···");

System.out.println(" i= "+i);

}

}

运行结果如下:

[Dennis Ritchie, Bjarne Stroustrup, James Gosling]

preposition ++

before operation···

i= 0

Dennis Ritchie

after operation···

i= 1

postposition ++

before operation···

i= 0

Bjarne Stroustrup

after operation···

i= 1

Process finished with exit code 0

上面的都是很基础的,只是单纯的为了回忆一下,所有需要记住的是:

==前置++(++i)是先进行++操作后再赋值==

==后置++(i++)是先进行赋值再进行++操作==

最近在网上看到这样一个题,本文的主要目的是这道题。

一道很烧脑的题

朋友在面试的时候遇到了一道题,然后我们一起交流的时候,他把这道题给我说了下,结果我也做错了.所以在此记录下:

题是这样的:

package com.dimple.javabase;

/**

*@program: JavaSEProject

*@description: 面试题中的一道烧脑题

*@author: Dimple

*@create: 2018-08-14 17:00

**/

public class Increment {

private static int k = 0;

public static void main(String[] args) {

int j=0;

int n=0;

for(int i=0;i<100 ;i++){

j=j++;

k=k++;

n=++n;

}

System.out.println(j);

System.out.println(k);

System.out.println(n);

}

}

答案出乎我的意料:

0

0

100

不需要去看编译后的字节码,其实很简单的就可以看出来:

分析:

在分析之前我们还是先看一个这样的代码:

package com.dimple.javabase;

import java.util.Arrays;

/**

*@program: JavaSEProject

*@description: 测试++运算符

*@author: Dimple

*@create: 2018-08-14 16:46

**/

public class AddOpt {

public static void main(String[] args) {

int j=0;

j = j++;

System.out.println(j);

}

}

以上代码如果我们使用的是IDEA编译器的话,在j下面有一个小波浪线提示以下话:

The value changed at ‘j++’ is never used less… (Ctrl+F1)

Inspection info: This inspection points out the cases where a variable value is never used after its assignment, i.e.:  - the variable never gets read after assignment OR  - the value is always overwritten with another assignment before the next variable read OR  - the variable initializer is redundant (for one of the above two reasons)

以上提示说的是:该j变量并没有被使用。emmmmm不是让它=j了吗?以上只是一个小的插曲,接下来开始我们的分析。

首先我们看到==j=j++;==这样的一句话,本身是有问题的(为了说明,我们把表达式左边的j叫做j1,右边的j叫做j2(注意,只是叫做!)):

1. 执行时,首先是会执行等号右边的话,也就是==j1=j2==这一句话,那么这样的一句话,得到的结果是j1=0,对吧。

2. 这个时候如果按照正常的逻辑,那么应该是执行j++这句话了对吧。是这样没错,肯定是会执行j++这一句话的。注意:执行这个j2++的时候,并不和j1在同一个工作区,j2++完了之后,并没有任何的变量去接收它。导致j2++废弃。所以j一直都是0.

总结

–操作符同理,其实细致点这个问题是可以看出来的,还是需要修炼基本功呀···

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值