1. 程式人生 > >Java 傳參

Java 傳參

變數有兩種型別 基本型別 和類型別 

引數也是變數,所以傳參分為 
基本型別傳參 
類型別傳參

步驟 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); 輸出多少? 怎麼理解?
         
    }
      
}