【问题标题】:Java assignment of static variable++静态变量++的Java赋值
【发布时间】:2012-12-01 09:54:06
【问题描述】:
当我将静态 int 的 value++ 分配给另一个 int 时,它执行的分配顺序似乎不遵循 Java 的操作顺序。不应该在=之前做++吗?
public class Book
{
private int id;
private static int lastID = 0;
public Book ()
{
id=lastID++;
}
}
在我构造的第一本书中,id 是 0。不应该是 1,因为 lastID++ 应该首先发生吗?
【问题讨论】:
标签:
java
variables
static
variable-assignment
【解决方案1】:
您正在使用后缀++ 运算符。这将在使用变量后递增(在您的情况下是赋值)。
如果你想在分配之前增加使用这个
id = ++lastID;
这称为前缀++ 运算符。
【解决方案2】:
不应该在=之前加++吗?
--> 是 ++ 首先评估如下:
你的表情:
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
}
}
【解决方案3】:
在大多数编程语言中,您可以使用 ++var 和 var++。
++var 立即递增变量的值,而 var++ while 递增变量的值,但返回上一个的值。
【解决方案4】:
lastID++;使用post-increment操作符,顾名思义你先用lastID的当前值(赋值给id),再用lastID的值增加 1。
【解决方案5】:
没有。 id = lastID++ 会影响lastID 到id,然后递增lastID。
试试
id = ++lastID;
这将做相反的事情(增加lastID,并将lastID 的新值影响到id)。
【解决方案6】:
lastID++ 返回 lastId 在增量之前的值。
如果你想让id也被递增,也就是得到lastID递增后的值,使用
id = ++lastID;