繁体   English   中英

java中的自动递增id

[英]Auto-Increment id in java

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

这是来自Team.java 的代码

public class Team{
    private int teamId;

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

这是来自Main.java 的代码

public class Main {

    public static void main(String[] args) {

    Team one= new Team();
    Team two= new Team();
        one.printTeamId();
        two.printTeamId();
    }
}

您需要一个额外的静态变量来存储团队的数量。 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 计算线程安全的对象的其他答案。

关于静态变量没问题,但如果你想线程安全,请使用原子整数。

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);
    }
}

这将使一个线程安全计数器而不是一个不是线程安全的静态计数器。

使您的 teamId 变量保持静态并使用一些整数值对其进行初始化(推荐为 -1)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM