精华内容
下载资源
问答
  • Java方法的形参实参

    2020-01-22 22:28:41
    Java方法的形参和实参形参实参传值调用传引用调用总结 形参与实参对应两种类型:值类型与引用类型 值类型:包括8种基本类型(byte、short、int、long、double、float、char、boolean)+ String 引用类型:数组、类...

    形参与实参对应两种类型:值类型与引用类型

    • 值类型:包括8种基本类型(byte、short、int、long、double、float、char、boolean)+ String
    • 引用类型:数组、类、接口等类型。

    注意String类型,这个比较特殊,它是存储在常量池中的,你可以把它近似看成值类型的。因为它的值一旦确定,就无法改变。

    • 为值类型时,形参方法内的参数值改变,并不会影响到实参的值。
    • 为引用类型时,形参方法内的参数值改变时,会影响到实参的值。注意是地址所指向的堆中的值,如果形参的地址改变了,那么这个改变不会影响到实参。

    形参

    用来接收调用方法时传递的参数。只有在被调用的时候才分配内存空间,一旦调用结束,就释放内存空间。因此仅仅在方法内有效。

    public void swap(int a, int b) {
            int temp = a;
            a = b;
            b = temp;
            System.out.println("a:" + a + " b:" + b);
    }
    

    这里边的a,b就是形参,temp是一个局部变量,方法结束,在栈空间中就会被销毁

    实参

    传递给被调用方法的值,预先创建并赋予确定值。

    1. 调用上面的
    2. swap(1,2);
    3. 其中1和2就是实际的参数值,就叫实参

    传值调用

    传值调用中传递的参数为基本数据类型,参数视为形参。

    public class Transform {
    
      public static void main(String[] args) {
        int i = 10;
        int j = 5;
        System.out.println("i: " + i + ", j: " + j);
        Transform.swap(i, j);
        System.out.println("i: " + i + ", j: " + j);
      }
    
      private static void swap(int a, int b) {
        int temp = a;
        a = b;
        b = temp;
        System.out.println("a: " + a + ", b: " + b);
      }
      
    }
    

    这里我们写了一个实现两个 int 型数据交换的方法,并且在 main() 方法中调用,然而结果却并不是我们想要的。
    运行结果如下图所示:
    传值调用测试运行结果
    就是因为基本数据类型是属于传值调用,当我们要实现交换时,方法内可以完成交换,只是形参进行了交换,方法结束,栈空间中就会销毁 swap() 方法内的局部变量,所以当调用 swap() 时,最终值还是实参的初始化值,并没有被修改。值改变作用到了形参,而不会作用到实参。

    传引用调用

    传引用调用中,如果传递的参数是引用数据类型,参数视为实参。在调用的过程中,将实参的地址传递给了形参,形参上的改变会影响到实参。

    /*
    	参数传递:
    	形参:方法声明时,方法小括号内的参数
    	实参:调用方法时,实际传入的参数值
    	java中传递值得机制:
    	形参是基本数据类型的: 将实参的值传递给实参的基本数据类型的变量
    	形参是引用数据类型的: 将实参的引用类型的值(即在堆空间中生成的首地址的值)传递给形参的引用类型的变量
    */
    public class Test {
    
      public static void main(String[] args) {
        Test t = new Test();
        Data data = new Data();
        System.out.println("data.i: " + data.i + ", data.j:" + data.j);
        // 调用
        Test.swap(data);
        System.out.println("data.i: " + data.i + ", data.j:" + data.j);
      }
    
      private static void swap(Data data) {
        int temp = data.i;
        data.i = data.j;
        data.j = temp;
      }
    }
    
    class Data {
      int i = 10;
      int j = 5;
    }
    

    形参部分直接传进去了一个对象,相当于堆空间的首地址值得引用
    运行结果:
    传引用调用测试运行结果

    总结

    1. java的基本数据类型是传值调用,引用类型是传引用调用;
    2. 当传值调用时,改变的是形参的值,并没有改变实参的值,实参的值可以传递给形参,但是,这个传递是单向的,形参不能传递回实参;
    3. 当传引用调用时,如果参数是对象,无论对对象做了何种操作,都不会改变实参对象的引用,但是如果改变了对象的内容,就会对应改变实参对象的内容。
    展开全文
  • JAVA基础之形参与实参的区别

    万次阅读 2017-03-15 22:23:42
    实参定义:全称"实际参数",用于调用时传递给方法的参数,即传递给被调用方法的值。说明:预先创建并赋予确定值。 1、形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参...

    形参

    定义:全称"形式参数",用于定义方法的时候使用的参数,目的用来接收调用该方法时传递的参数。

    说明:只有在被调用时才会分配内存单元,在调用结束,即刻释放所分配的内存单元。因此,只在方法内才有效。

    实参

    定义:全称"实际参数",用于调用时传递给方法的参数,即传递给被调用方法的值。

    说明:预先创建并赋予确定值。

    1、形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量。
    2、实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值。
    3、实参和形参在数量上,类型上、顺序上应严格一致,否则就会发生类型不匹配的错误。
    4、在一般传值调用的机制中只能把实参传送给形参,而不能把形参的值反向地传送给实参。因此在函数调用过程中,形参值发生改变,而实参中的值不会变化。而在引用调用的机制当中是将实参引用的地址传递给了形参,所以任何发生在形参上的改变实际上也发生在实参变量上。
    代码展示:
    
    
    展开全文
  • 这两天和一个朋友和我讨论了一个面试题,是形参与实参的问题。一个很有意思小问题,一开始有些乱后来想想就明白了,所以我就对java参数传递做一个总结,以加深自己基础知识。形参和实参区别形参就是形式参数,...

    这两天和一个朋友和我讨论了一个面试题,是形参与实参的问题。一个很有意思的小问题,一开始有些乱后来想想就明白了,所以我就对java参数传递做一个总结,以加深自己的基础知识。

    形参和实参的区别

    形参

    就是形式参数,用于定义方法的时候使用的参数,用来接收调用者传递的参数。形参只有在方法被调用的时候,虚拟机才会分配内存单元,在方法调用结束之后便会释放所分配的内存单元。

    因此,形参只在方法内部有效,所以针对引用对象的改动也无法影响到方法外。

    实参

    就是实际参数,用于调用方法是传递给方法的参数。实参在传递给方法前是要被先赋值才能传递的。

    在值传递的过程中,只能把实参传递给形参,而不能把形参的值反作用给实参。在函数调用过程中·,形参的值发生改变,而实参的值不会发生改变。

    在引用传递调用的机制中,实际上是将实参引用的地址传递给了形参,所以任何发生在形参上的改变也会发生在实参变量上。

    值传递和引用传递

    在谈值传递和引用传递之前先了解下java数据类型有哪些

    Java数据类型

    java的数据类型有两大类,基本类型和对象类型。相应的,变量也有两种类型:基本类型和引用类型。

    基本类型包括byte,short,int,long,char,float,double,boolean 这八大基本数据类型,

    基本类型的变量保存原始值,即它代表的值就是数值本身,原始值一般对应在内存上的栈区。

    引用类型包括 类类型,接口类型和数组保存的是引用值,引用值指向内存空间的地址。代表了某个对象的引用,而不是对象本身。对象本身存放在这个引用值所表示的地址的位置。被引用的对象对应内存上的堆内存去。

    变量的基本类型和引用类型的区别

    基本数据类型在声明是系统就给它分配空间,无论是否赋值,声明的时候虚拟机就会分配 4字节的内存区域。引用数据类型不同,它声明时只给变量分配了引用空间,而不分配数据空间。

    String 类型时声明的时候没有分配数据空间,只有 4byte 的引用大小,在栈区,而在堆内存区域没有任何分配。

    基本类型的变量是值传递;引用类型的变量

    值传递

    方法调用时,实际参数把它的值传递给对应的形式参数,函数接收的原始值得一个copy,此时内存中存在两个相等的基本类型,即实际参数和形式参数,后面方法中的操作都是对形参这个值得修改,不影响实际参数的值

    引用传递

    一般也称为地址传递。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,函数接收的原始值的内存地址

    在方法执行中,形参和实参内容相同,只想同一块内存地址,方法执行中对引用的操作将影响到实际对象。

    展开全文
  • Java 形参与实参

    2018-03-16 14:53:13
    这两天和一个朋友和我讨论了一个面试题,是形参与实参的问题。一个很有意思小问题,一开始有些乱后来想想就明白了,所以我就对java参数传递做一个总结,以加深自己基础知识。形参和实参区别形参就是形式参数,...

    这两天和一个朋友和我讨论了一个面试题,是形参与实参的问题。一个很有意思的小问题,一开始有些乱后来想想就明白了,所以我就对java参数传递做一个总结,以加深自己的基础知识。

    形参和实参的区别

    形参

    就是形式参数,用于定义方法的时候使用的参数,用来接收调用者传递的参数。形参只有在方法被调用的时候,虚拟机才会分配内存单元,在方法调用结束之后便会释放所分配的内存单元。

    因此,形参只在方法内部有效,所以针对引用对象的改动也无法影响到方法外。

    实参

    就是实际参数,用于调用方法是传递给方法的参数。实参在传递给方法前是要被先赋值才能传递的。

    在值传递的过程中,只能把实参传递给形参,而不能把形参的值反作用给实参。在函数调用过程中·,形参的值发生改变,而实参的值不会发生改变。

    在引用传递调用的机制中,实际上是将实参引用的地址传递给了形参,所以任何发生在形参上的改变也会发生在实参变量上。

    值传递和引用传递

    在谈值传递和引用传递之前先了解下java数据类型有哪些

    Java数据类型

    java的数据类型有两大类,基本类型和对象类型。相应的,变量也有两种类型:基本类型和引用类型。

    基本类型包括byte,short,int,long,char,float,double,boolean 这八大基本数据类型,

    基本类型的变量保存原始值,即它代表的值就是数值本身,原始值一般对应在内存上的栈区。


    引用类型包括 类类型接口类型数组  保存的是引用值,引用值指向内存空间的地址。代表了某个对象的引用,而不是对象本身。对象本身存放在这个引用值所表示的地址的位置。被引用的对象对应内存上的堆内存去。

    变量的基本类型和引用类型的区别

    基本数据类型在声明是系统就给它分配空间,无论是否赋值,声明的时候虚拟机就会分配 4字节的内存区域。引用数据类型不同,它声明时只给变量分配了引用空间,而不分配数据空间。 

    String 类型时声明的时候没有分配数据空间,只有 4byte 的引用大小,在栈区,而在堆内存区域没有任何分配。

    基本类型的变量是值传递引用类型的变量

    值传递

    方法调用时,实际参数把它的值传递给对应的形式参数,函数接收的原始值得一个copy,此时内存中存在两个相等的基本类型,即实际参数和形式参数,后面方法中的操作都是对形参这个值得修改,不影响实际参数的值

    引用传递

    一般也称为地址传递。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,函数接收的原始值的内存地址

    在方法执行中,形参和实参内容相同,只想同一块内存地址,方法执行中对引用的操作将影响到实际对象。




    展开全文
  • 例如,主方法入栈,基本数据类型变量num入栈,再是其他方法入栈(其他方法中有方法相同基本数据类型变量num),弹栈时,其他方法出栈(伴随着num出栈),因此num最终结果是主方法num值 ...
  • public class MyArray2 { public static void main(String[] args) ... //通过对象调用普通方法 MyArray2 tm=new MyArray2(); tm.FangFa(); } void FangFa() { System.out.println("北京尚学堂");} }
  • 以前对形参与实参方面知识有点模糊,这是Java里面最基础地方,由于在这上面吃了亏,所以今天特意返回去学习了一下特作了以下总结: 无返回值就是表示方法中无返回例如:public class abb { public void name() { ...
  • 形参实参的定义 形参:是定义方法时使用参数,用来接收调用者传递参数,而且只有方法调用时虚拟机才会分配内存空间,在方法调用结束后便会释放所分配内存单元。 实参:是调用方法时给方法传递值,预先...
  • Java的方法定义和形参与实参的概念一、定义方法的通用格式二、三种方法的定义1.无参数无返回值2.有参数无返回值3.有参数有返回值四、定义方法的注意事项五、调用方法的三种形式 一、定义方法的通用格式 讲解: &...
  • 虽然Java中传递是引用,可以轻易地实现对对象改变,但是仍然要注意形参与实参、引用与对象关系,千万不要简单地以为传引用就一定可以实现对象改变,否则可能犯下低级错误。本文通过实例对比讲解传递引用易犯...
  • 1.引用数据类型作为参数,形参的改变会影响实参的值(String类包装类除外) 引用数据类型作为参数 --------- 参数值保存在堆内存空间中,而栈内存中对象则保存参数值在堆内存空间中地址值 原理分析: 1....
  • 形参实参对应两种类型:值类型引用类型 值类型:包括8种基本类型(byte、short、int、long、double、float、char、boolean)+String 引用类型:数组、类、接口等类型。 值类型时,形参方法参数值改变,并...
  • Java 与 C 方法实参形参与指针联系分享Java 形参为基本类型Java 形参为类对象C/C++ 形参为基本类型C/C++ 形参为结构体C/C++ 形参为基本类型指针C/C++ 形参为结构体指针讨论结果图示因为不是计算机专业,在大学时...
  • 形参方法声明时小括号内声明变量,如下面 int i: void fun(int i){ i=i+1; } 是为了声明此方法需要传入参数类型。...虚拟机在栈中为方法开辟了内存空间,并创建了形参,然后将实参的值赋给了形参。 在方法
  • temp(int a){//a为temp的形参,形参用来接受实参中传过来的值 //此处temp为构造方法,构造方法名拥有类名一样的名称此处temp等于class类中的temp,构造方法不能被任何修饰符修饰(除了 public),且构造方
  • Java 与 C 方法实参形参与指针联系分享Java 形参为基本类型Java 形参为类对象C/C++ 形参为基本类型C/C++ 形参为结构体C/C++ 形参为基本类型指针C/C++ 形参为结构体指针讨论结果图示 因为不是计算机专业,在大学...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 477
精华内容 190
关键字:

java方法的形参与实参

java 订阅