形参于实参对应两种类型:值类型与引用类型
值类型:包括8种基本类型(byte、short、int、long、double、float、char、boolean)+String
引用类型:数组、类、接口等类型。
值类型时,形参方法内的参数值改变,并不会影响到实参的值。
引用类型时,形参方法内的参数值改变时,会影响到实参的值。注意是地址所指向的堆中的值,如果形参的地址改变了,那么这个改变不会影响到实参。
通俗一点讲:形参就是定义方法时的参数,是抽象的,实参是调用方法时的参数,可以理解为实际运用中的参数,是具体的。
就如字面意思,形参只是作为一个参照(模板),实参就是实物(通过模板印出来的东西),至于过程,可以这么说:实物(印制所需要的材料)加入到模板(形参)中,然后通过加工(就是你所写的方法),形成所需要的实物;
下面看例子:
public class DataDemo { public static void main(String args[]) { int a = 123; String s = "看我 "; StringBuffer sb = new StringBuffer("stringBuffer"); changeInt(a);//这里的a是实参 chengeString(s);//这里的s是实参 chengeModel(sb); System.out.println("a=" + a); System.out.println("s=" + s); System.out.println("sb=" + sb); } /*在参数传递的过程中, *原始数据类型变量的值在方法调用期间会复制给形参, *因此形参是方法的局部变量, *所以对形参做出的任何修改在调用结束后都不会影响该变量的值。 */ public static void changeInt(int a) {//这里的a是形参 a = 1; } /* * 对于String类型,并非原始数据类型, * 并且String是非可变的类, * 特点是在该对象的生命周期内,状态固定,不存在任何修改对象的方法 * */ public static void chengeString(String s) {//这里的s是形参 s = "我要变形"; } /*对于对象引用变量,传递的是一个对象的引用值 * 在方法调用期间,实参和形参都是指向一个对象的引用 * 所以在方法的调用过程中,对该对象的引用会导致该对象的变化 */ public static void chengeModel(StringBuffer sb) {//这里的s是形参 sb.append("Buffer"); } }
打印结果:
a=123
s=看我
sb=stringBufferBuffer