1. 程式人生 > >java中值傳遞和引用傳遞的知識點

java中值傳遞和引用傳遞的知識點

java中值傳遞和引用傳遞的知識點

直接看下面的截圖和程式碼吧

package com.xuebao;

public class ValueAndRef {
	
	/**
	 * 
	* @Description: (測試值傳遞和引用傳遞) 
	* @param  pa 基本型別  值傳遞
	* @param  pstu 自定義類 引用傳遞
	* @param  parr  陣列 引用傳遞
	* 2017年2月20日下午5:46:32
	* jerry
	* @return void    返回型別 
	 */
	public void change(int pa, Student pstu, int[] parr) {
		pa = pa + 10;
		pstu.age = pstu.age + 15;
		parr[0] = parr[0] + 5;
		System.out.println("方法體中改變後a = " + pa);
		System.out.println("方法體中改變後student.age = " + pstu.age);
		System.out.println("方法體中改變後arrs[0] = " + parr[0]);
	}

}
package com.xuebao;
public class TestValueAndRef {

	public static void main(String[] args) {
		int a = 10;
		Student student = new Student();
		student.age = 10;
		int[] arrs = new int[]{9, 55, 89, 92};
		System.out.println("初始值a = " + a);
		System.out.println("初始值student.age = " + student.age);
		System.out.println("初始值arrs[0] = " + arrs[0]);
		
		ValueAndRef valueAndRef = new ValueAndRef();
		valueAndRef.change(a, student, arrs);
		
		System.out.println("呼叫方法後a = " + a);
		System.out.println("呼叫方法後student.age = " + student.age);
		System.out.println("呼叫方法後arrs[0] = " + arrs[0]);
		/**
		 * java中值傳遞和引用傳遞的知識總結
		 * 1.定義:方法在呼叫完畢之後是否改變引數的原始數值
		 * 2.值型別按值傳遞,方法呼叫完數值不變
		 * 3.引用型別按引用傳遞,方法呼叫完數值改變
		 * 4.不管是值型別還是引用型別,都是把棧中空間備份一份,只不過值型別備份具體數值,引用型別備份記憶體地址,所
		 * 以說java都是按值傳遞也對,這是從備份的角度來說的
		 * 5.java資料型別分類原則,根據是否封裝指標(即分配空間形式)
		 * 6.基本型別,值型別,只在棧中分配一塊記憶體,8個基本資料型別(byte,short,int,long,float,double,char,boolean)
		 * 7.引用型別 在棧和堆中各分配一塊記憶體,類,陣列,抽象類,介面等都是引用型別
		 */
	}
}