为什么他们有相同的身份证?

goo*_*ing 0 java

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)

为什么这会回来Kind: falcon, Id: 2; Kind: eagle, Id: 2我真的想不出来?鸟类[0]和鸟类[1]有不同的实例,它们的ID是2吗?为什么不是1和1?

das*_*ght 5

这是因为它id是静态的,因此在类的所有实例之间共享.

您可能想要的是这些方面:

public class Bird {
    private static last_id = 0;
    private int id ;
    private String kind;
    public Bird(String requiredKind) {
        id = last_id++;
        kind = requiredKind;
    }
    // ...
}
Run Code Online (Sandbox Code Playgroud)

请注意,这可能过于简单,不适合多线程环境.