关于血瓶为什么输出100,个人认为参考
步骤2:引用与=
如果一个变量是基本类型
比如 int hp = 50;
我们就直接管hp叫变量
=表示赋值的意思。
如果一个变量是类类型
比如 Hero h = new Hero();
我们就管h叫做引用。
=不再是赋值的意思
=表示指向的意思
比如 Hero h = new Hero();
这句话的意思是
引用h,指向一个Hero对象
所以
public void huixue(int xp){
hp = hp + xp;
//回血完毕后,血瓶=0
xp=0;
}
teemo.huixue(xueping);
现在变量xueping是基本类型,则调用huixue方法只是将xueping的值赋值给xp,然后xp= 0;并没有影响xueping的值。
那为什么teemo.revive方法不能改变teemo的血量呢?
public void revive(Hero h){
h = new Hero("提莫",383);
}
public static void main(String[] args) {
Hero teemo = new Hero("提莫",383);
//受到400伤害,挂了
teemo.hp = teemo.hp - 400;
teemo.revive(teemo);
//问题: System.out.println(teemo.hp); 输出多少? 怎么理解
}
这是因为在main函数里面,引用teemo指向一个Hero对象(提莫),该对象内存地址为1,里面存放了(提莫)的名字和血量
teemo.revive(teemo),变量teemo是一个类类型,参考步骤3,revive方法将h也指向了(提莫)对象,内存地址1。
然后revive方法内 又引用h指向了一个新的对象(提莫1),内存地址为2,里面存放了(提莫2)的名字和血量
所以revive方法内的h = new Hero("提莫",383);只是令h指向了(提莫1),并不能改变teemo.hp的值。