[英]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.