3

当我将静态 int 的 value++ 分配给另一个 int 时,它执行分配的顺序似乎不遵循 Java 的操作顺序。它不应该在++之前做=吗?

public class Book
{
  private int id;
  private static int lastID = 0;

  public Book ()
  {
    id=lastID++;
  }
}

在我构建的第一本书中,id 是 0。不应该是 1,因为lastID++应该首先发生吗?

4

6 回答 6

5

您正在使用后缀++运算符。这将在使用变量后递增(在您的情况下是赋值)。

如果你想在分配之前增加使用这个

id = ++lastID;

这称为前缀++运算符。

于 2012-12-13T13:42:06.413 回答
3

它不应该在=之前做++吗?

--> Yes++首先评估如下:

你的表情:

id = lastID++;

相当于下面的表达式

temp = lastId;    // temp is 0
lastID = lastID + 1;  // increament, lastId becomes 1
id = temp;   // assign old value i.e. 0

因此id as 0,在这种情况下,您应该使用预增量运算符(++):

public class Book
{
  private int id;
  private static int lastID = 0;

  public Book ()
  {
    id = ++lastID; // pre-increament
  }
}
于 2012-12-13T13:54:41.323 回答
2

lastID++;使用后自增运算符,顾名思义,您lastID首先使用 的当前值(分配给id),然后将 的值lastID加 1。

于 2012-12-13T13:41:15.237 回答
1

在大多数编程语言中,您可以使用 ++var 和 var++。

++var 立即增加变量的值,而 var++ while 增加变量的值,但返回之前的值。

于 2012-12-13T13:42:09.857 回答
1

lastID++返回lastId增量之前的值。

如果你想id也被递增,也就是得到lastID递增后的值,使用

id = ++lastID;
于 2012-12-13T13:39:14.900 回答
1

编号id = lastID++会影响lastIDid,然后递增lastID

尝试

id = ++lastID;

这将做相反的事情(增加,并影响tolastID的新值)。lastIDid

于 2012-12-13T13:39:57.097 回答