java小白又来提问啦,形参实参的辨别。

代码如下:
public class Test {
public static void main(String[] args){
int max= 0;
max(1,2,max);//此处括号里的1,2,max是实参
System.out.println(max);//这个语句里的max也是实参,这个理解是否正确?
}

public static void max(int n1,int n2,int max){//方法签名里的max是形参
    if(n1>n2){
        max=n1;//那这个max呢?是形参还是实参?我偏向是形参,因为用eclips点时和形参连在一起。但是我不明白其中的道理。请高手指教
    }else{
        max=n2;
    }
}

}

你的例子不好,因为形参和实参都是max
看这个例子:
void foo(int a)
{
}
int main()
{
int i = 1;
foo(i);
}
这里i叫做实参,a叫做形参。

1、形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量。
2、实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值。
3、实参和形参在数量上,类型上、顺序上应严格一致,否则就会发生类型不匹配的错误。
4、在一般传值调用的机制中只能把实参传送给形参,而不能把形参的值反向地传送给实参。因此在函数调用过程中,形参值发生改变,而实参中的值不会变化。而在引用调用的机制当中是将实参引用的地址传递给了形参,所以任何发生在形参上的改变实际上也发生在实参变量上。

1、形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量。
2、实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值。
3、实参和形参在数量上,类型上、顺序上应严格一致,否则就会发生类型不匹配的错误。
4、在一般传值调用的机制中只能把实参传送给形参,而不能把形参的值反向地传送给实参。因此在函数调用过程中,形参值发生改变,而实参中的值不会变化。而在引用调用的机制当中是将实参引用的地址传递给了形参,所以任何发生在形参上的改变实际上也发生在实参变量上。

在java语言中,改变形参,不会影响实参。
因此,对于int这样的简单类型,改变a不会改变i
如果是一个类类型(引用),改变对象的引用(让a指向另一个对象),同样不会改变i
改变a对象的字段(而不是让它指向另一个对象),则会同时改变i指向的对象,因为它们是一个对象。

你方法里面自己int max这个是形参,只是你把这个这个参数名称定义成和上面主方法里面那个一样了,你可以不和主方法那个实参名称一样,只要类型一样就行,实参传什么给这个方法跟这个方法用什么名称的形参去接这个参数没关系!只是便于你区别罢了,你用c这样的int类型去接你就知道,它不过是"装"实参内容的一个容器,当然这里我们管他叫形参,至于叫什么没关系。

实参是自己家的老婆。

传参数的时候,只是让别人家的老婆变得和自家老婆一样了,自家老婆还是自己的老婆。总不能真的把自己老婆传过去吧。

形参是别人家的老婆。

max在这里是实参,形参只会出现在方法定义的参数中,调用这个方法时要把实参传递给形参