为什么这段代码的输出都是2?

t s*_*vyn -3 java arrays concatenation

public class Bird
{
private static int id = 0;
private String kind;
public Bird(String requiredKind)
{
    id = id + 1;
    kind = requiredKind;
}
public String toString()
{
    return "Kind: " + kind + ", Id: " + id + "; ";
}
public static void main(String [] args)
{
    Bird [] birds = new Bird[2];
    birds[0] = new Bird("falcon");
    birds[1] = new Bird("eagle");
    for (int i = 0; i < 2; i++)
        System.out.print(birds[i]);
    System.out.println();
}
}
Run Code Online (Sandbox Code Playgroud)

我明白因为int是静态的,两个id都是相同的但是无法弄清楚为什么输出是2而不是1?

运行时输出:

Kind: falcon, Id: 2; Kind: eagle, Id: 2; 
Run Code Online (Sandbox Code Playgroud)

Lew*_*rin 5

它是一个静态变量.由所有对象实例共享.你创建了两个对象,因此通过构造函数递增两次..说实话我看不出还有什么可以添加到答案中.

   //where [x] denotes id:
    First instance: id = [0] + 1; //id is 1 
    Second instance id = [1] + 1 // id is 2 
Run Code Online (Sandbox Code Playgroud)

嗯..如果你想拥有一个唯一的id,你可以有一个对象独有的额外字段,我认为这应该可以解决你的问题:

private int Id; 
private static int tracker;
public Bird()
{
    //keep track of object instances, yet each increment is unique to a particular 
    //object
   Id = ++tracker; 
}
Run Code Online (Sandbox Code Playgroud)

  • 哦,我明白了,谢谢你的所有答案 (2认同)