++;和=在Java中

++;和=在Java中,java,computer-science,Java,Computer Science,据 ++优先级高于= 但是下面的代码。count打印出0而不是1 我想int count=F[0]++, 获取F[0]的值 ++应用于该值0,该值变为1 然后将此增加的值指定给count 但事实并非如此。要打印出1,应该是int count=++F[0] 天哪,我是不是已经很长时间尴尬地误解了这种极其基本的事情? 这是大学一年级学生的101题,但有人能告诉我为什么打印出0而不是1吗 int[] F = new int[26]; int count = F[0]++

++优先级高于=

但是下面的代码。count打印出0而不是1

我想
int count=F[0]++,

  • 获取F[0]的值

  • ++应用于该值0,该值变为1

  • 然后将此增加的值指定给count

  • 但事实并非如此。要打印出1,应该是
    int count=++F[0]

    天哪,我是不是已经很长时间尴尬地误解了这种极其基本的事情? 这是大学一年级学生的101题,但有人能告诉我为什么打印出0而不是1吗

            int[] F = new int[26];
            int count = F[0]++;
            System.out.println(count);      // count is 0  (instead of 1) !!!
    
    

    赋值发生在后增量之前,这就是为什么它被称为后增量。因此,
    count
    变为
    0
    ,但如果打印出
    F[0]
    ,其值将为
    1

    int[] F = new int[26];       // F[0] is 0 (default value)
    int count = F[0]++;          // F[0] is 0, 
                                 // then count = F[0], therefore count = 0
                                 // then F[0] is 1 (post-incremented)
    System.out.println(count);   // count is not affected and remains 0
    

    是的,但是
    ++
    操作符操作系统后增量,所以它的工作不是在计算i=0后获取值
    int a=i++
    a
    设置为
    0
    int a=++i
    a
    设置为
    1
    。第一个是在语句完成后发生的后增量。第二个是
    预增量
    ,它发生在语句完成之前。这在技术上是不正确的;代码
    inty=x++编译为
    iload_1
    iinc 1,1
    istore_2
    ,因此增量发生在存储之前。只是存储使用了在增量发生之前由iload_1加载的值。是的,我是从开发人员的观察中描述的。我对编译的字节码一无所知。谢谢你的教训:)当然!实际上,它只会对复杂的代码产生影响,比如
    inty=(x++++)(x++)其中第一个增量在执行第二个增量之前生效,因此如果
    x
    开始为0,则第一个
    x++
    的值为0,第二个的值为1,留下y=1。这表明x的值在y被赋值之前已经改变了,但最好还是不要这样写代码。谢谢@kaya3,我需要你的答案。@Andreas:一个拼写错误修复了。:)