Java 傳參
阿新 • • 發佈:2018-12-16
變數有兩種型別 基本型別 和類型別
引數也是變數,所以傳參分為
基本型別傳參
類型別傳參
步驟 1 : 基本型別傳參
基本型別傳參
在方法內,無法修改方法外的基本型別引數
public class Hero { String name; //姓名 float hp; //血量 float armor; //護甲 int moveSpeed; //移動速度 public Hero(){ } //回血 public void huixue(int xp){ hp = hp + xp; //回血完畢後,血瓶=0 xp=0; } public Hero(String name,float hp){ this.name = name; this.hp = hp; } public static void main(String[] args) { Hero teemo = new Hero("提莫",383); //血瓶,其值是100 int xueping = 100; //提莫通過這個血瓶回血 teemo.huixue(xueping); System.out.println(xueping); } }
步驟 2 : 引用與=
如果一個變數是基本型別
比如 int hp = 50;
我們就直接管hp叫變數
=表示賦值的意思。
如果一個變數是類型別
比如 Hero h = new Hero();
我們就管h叫做引用。
=不再是賦值的意思
=表示指向的意思
比如 Hero h = new Hero();
這句話的意思是
引用h,指向一個Hero物件
步驟 3 : 類型別傳參
類型別又叫引用
第24行的引用 teemo與 第17行的引用hero,是不同的引用
通過呼叫garen.attack(teemo, 100); 使得這兩個引用都指向了同一個物件
所以在第18行hero.hp = hero.hp - damage; 就使得該物件的hp值,發生了變化
因此第25行,列印該物件的Hp值就是變化後的值
public class Hero { String name; // 姓名 float hp; // 血量 float armor; // 護甲 int moveSpeed; // 移動速度 public Hero(String name, float hp) { this.name = name; this.hp = hp; } // 攻擊一個英雄,並讓他掉damage點血 public void attack(Hero hero, int damage) { hero.hp = hero.hp - damage; } public static void main(String[] args) { Hero teemo = new Hero("提莫", 383); Hero garen = new Hero("蓋倫", 616); garen.attack(teemo, 100); System.out.println(teemo.hp); } }
步驟 4 : 練習-傳參
在方法中,使引數引用指向一個新的物件
外面的引用是指向原來的物件?還是新的物件?
public class Hero {
String name; //姓名
float hp; //血量
float armor; //護甲
int moveSpeed; //移動速度
public Hero(){
}
public Hero(String name,float hp){
this.name = name;
this.hp = hp;
}
//復活
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); 輸出多少? 怎麼理解?
}
}