【问题标题】: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++ 会影响lastIDid,然后递增lastID

            试试

            id = ++lastID;
            

            这将做相反的事情(增加lastID,并将lastID 的新值影响到id)。

            【讨论】:

              【解决方案6】:

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

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

              id = ++lastID;
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2016-09-29
                • 1970-01-01
                • 1970-01-01
                • 2021-11-18
                • 1970-01-01
                • 1970-01-01
                • 2012-09-12
                相关资源
                最近更新 更多