代码之家  ›  专栏  ›  技术社区  ›  sander

java中的自动增量id

  •  3
  • sander  · 技术社区  · 8 年前

    第一队和第二队都有id 0?我做错了什么?我只是想在每次创建新对象时自动增加id。

    这是源代码 团队Java语言

    public class Team{
        private int teamId;
    
        public Team(){
            this.teamId= teamId++;
        }
        public void printTeamId(){
            System.out.println(this.teamId);
        }
    }
    

    这是源代码 主要的Java语言

    public class Main {
    
        public static void main(String[] args) {
    
        Team one= new Team();
        Team two= new Team();
            one.printTeamId();
            two.printTeamId();
        }
    }
    
    3 回复  |  直到 8 年前
        1
  •  12
  •   Peter Bruins    5 年前

    您需要一个额外的静态变量来存储团队数量。 static 表示所有对象共享此变量。每个团队都有自己的变量 teamId ,但共享变量 teamIdCounter

    public class Team{
        private int teamId;
        private static int teamIdCounter = 0;
    
        public Team(){
            this.teamId= teamIdCounter++;
        }
        public void printTeamId(){
            System.out.println(this.teamId);
        }
    }
    

    如果您使用的是多线程,请检查其他关于如何使用AtomicInteger安全计算对象线程数的答案。

        2
  •  6
  •   Gatusko    8 年前

    关于静态变量是可以的,但如果希望线程安全,请使用原子整数。

    public class Team{
        private int teamId;
        private static AtomicInteger atomicInteger = new AtomicInteger(0);
    
        public Team(){
            this.teamId= atomicInteger.incrementAndGet();
        }
        public void printTeamId(){
            System.out.println(this.teamId);
        }
    }
    

    这将使线程安全计数器成为不安全的静态计数器。

        3
  •  -2
  •   Shreshth Neema    8 年前

    使您的teamId变量为静态变量(&A);使用某个整数值初始化它(建议为-1)。

    使用初始值-1导致第一个teamId=0。