メソッドの形式パラメータ---(基本データ型と参照データ型をパラメータとして)

4479 ワード

メソッドの形式パラメータ:
パラメータ:メソッド宣言時、メソッドカッコ内のパラメータ実パラメータ:メソッドを呼び出すと、実際にパラメータの値が入力されます.
  • ルール:javaにおけるパラメータ伝達メカニズム、値伝達メカニズム
  • パラメータは基本データ型である:実パラメータの値をパラメータの基本データ型の変数
  • に渡す.
  • パラメータは参照データ型である:実パラメータの参照型変数の値(スタック空間のオブジェクトエンティティのヘッダアドレス値に対応)をパラメータの参照型変数
  • に渡す.
  • 基本タイプ:形式パラメータの変更は実際のパラメータ
  • に影響しない
  • 参照タイプ:形式パラメータの変更は実際のパラメータ
  • に直接影響します.
    1:パラメータが基本データ型の場合、変数の値が渡されます.たとえば、int a=10です.では、伝わったのは10です!
    package qqwwffg.pass_method_paramater;
    
    public class PrimitiveType {
    
     public void change(int a) {
      a = 3;
     }
    
     public static void main(String[] args) {
      int a = 1;
      PrimitiveType test = new PrimitiveType();
      test.change(a);
      System.out.println(a); // 1 ,   3
     }
    }

    change()メソッドは呼び出されたときにメモリにも1つの空間を割り当てる記憶され,渡された値,すなわち3が格納.メソッドが終了すると、このメモリはゴミ回収を待つが、mainメソッドでは、mainメソッドを呼び出すときに割り当てられたメモリ領域のaの値が印刷され、彼ら2人の間には何の関係もないので、印刷されるのはやはり1である.
    2:パラメータが参照データ型(クラス、配列、インタフェース)である場合、ポイントparam=new Point()などの変数の値も伝達されます.では、ポイントという変数の値が伝わってきます.ポイントというオブジェクトではありません.ポイントという変数の値は、実はポイントオブジェクトのメモリ内のアドレス(参照とも呼ばれる)です!
    public class ReferenceType {
    
     public void changePoint(Point point) {
      point.x = 5;
      point.y = 6;
     }
    
     public void changeReference(Point point) {
      point = null;
     }
    
     public void testPassByStirng(String param) {
      param = "newValue";
     }
    
     public static void main(String[] args) {
      int a = 1;
      Point point = new Point(1, 2);
      ReferenceType test = new ReferenceType();
      test.changePoint(point);
      System.out.println(point.x); // 5     1
      System.out.println(point.y); // 6     2
      test.changeReference(point); //      ,          ?
      int x = point.x; //   
      System.out.println("x     " + x );
    
      String param = "value";
      test.testPassByStirng(param);
      System.out.println(param); //  value ,    newValue
     }
    }
    
    class Point {
     int x;
     int y;
     public Point(int x, int y) {
      this.x = x;
      this.y = y;
     }
    }
         java  ,                  ,               ,                    ,            ,       ,        !
    
        changePoint       ,  main     Point      point    changePoint   point,  ,  point       main     Point   (new    ),        , point      Point   (new    )        (point.x = 5;point.y = 6;),           Point   (new    ),  ,       ,             ,   ,     Point    x,y   ,        !     1 2,  5 6 
    

    小結:javaでは、メソッドパラメータの伝達は常に伝達値であり、この値は、基本データ型では変数に与えられた値であり、参照データ型では、この値はオブジェクトの参照であり、このオブジェクト自体ではない.