Java程序输出结果的顺序不了解。求大神帮忙解释一下

这个程序运行后的结果是:
Orc 12: I'm a Villain and my name is Limburger
Orc 19: I'm a Villain and my name is Bob
为什么先执行Orc 12和Orc 19?请大神帮忙解释一下,谢谢
代码如下:

class Villain{
private Stringo U o ) E x name;
protected void set(String nm) {name=nm;}
public Villain(String name) {this.name=name;}
public String toString() {
return "I'm a Villain and my nameP A k is "+name;
}
}
public class Orc extends Villain{
private int orcNumberi K m r;
public Orc(String name,int orcNumber) {
super(name);
this.orcNumber=orcNumber;
}
public void Chang^ I w Y x ?  6 Ue(String name,int orcNumber) {
set(name);
this.orcNumber=od 3 F k m Z } 0 1rcNu8 O U ~ R r B @mber;
}
public String toString() {
return "Orc "+orcNumber+": "+supej P &r.toString();
}
public static voidf } @ B y main(String[] args) {
Orc orc=new Orc("Limburger",12);
System.out.println(orc);
orc.Change("Bob", 19);
Syf s } $ $ ostem.out.println(orc);
}
}

回答

因为刚开始传的你在new对象u F T C ) R ,时候已经传参数了,然后打印出来X f R 7 ( W a V /是Orc 12: I'm a Villain and my name is Limburger,
后来你在原有的对象上面orc.Change("Bob", 19);传入参数把原有的数据覆盖了所以打印出来的是Orc 19: I'm a Villain and] P p x m 7 M my name is Bob