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.引用类型 在栈和堆中各分配一块内存,类,数组,抽象类,接口等都是引用类型
*/
}
}