精华内容
下载资源
问答
  • java实参与形参

    千次阅读 2017-08-31 16:00:42
    形参实参的功能是作数据传送。发生函数调用时, 主调函数把实参的值传送给被调函数的形参从而实现主调函数向被调函数的数据传送。1、形参变量只有在被调用时才分配内存单元,在调用结束时, 即刻释放所分配的内存...
    形参出现在函数定义中,在整个函数体内都可以使用, 离开该函数则不能使用。
    实参出现在主调函数中,进入被调函数后,实参变量也不能使用。 
    形参和实参的功能是作数据传送。
    发生函数调用时, 主调函数把实参的值传送给被调函数的形参从而实现主调函数向被调函数的数据传送。
    1、形参变量只有在被调用时才分配内存单元,在调用结束时, 即刻释放所分配的内存单元。
       因此,形参只有在函数内部有效。 函数调用结束返回主调函数后则不能再使用该形参变量。 
    
    2、实参可以是常量、变量、表达式、函数等, 无论实参是何种类型的量,在进行函数调用时,
       它们都必须具有确定的值,以便把这些值传送给形参。 因此应预先用赋值,输入等办法使实参获得确定值。 
    
    3、实参和形参在数量上,类型上,顺序上应严格一致, 否则会发生“类型不匹配”的错误。 
    
    4、函数调用中发生的数据传送是单向的。 
       即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。
       因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。
                                                            ------来自百度知道
    package shunxu;
    
    public class shunxun {
        public int add(int i,int j) {
            return j=i+j;
        }
    
       public static void main(String[] args) {
           int m=1;
           int n=2;
          shunxun shunxun =new shunxun();
          n= shunxun.add(m, n);
          System.out.println(n);
       }
        
    }

    上面定义了一个add函数,带有形参i,j       形参:就是一个形式上的参数,并无具体的值

    m,n是传入函数的具体实际的参数,称为实参

    这个add函数    就是一个封装思想的方法,类似3D打印机,只是给他一个模型,他就自己对照着开始工作,并且执行完毕,过程中对模型(实参)无影响

    这个过程实参就是这个模型形参是3D打印机工作的原材料入口(描述了都可以给什么模型,控制输入格式),当对照一个实参的时候,打印机自己装配原材料,接下来一系列过程只对原材料进行操作,所以对模型(实参)无影响

     

    简单理解,实参是实在存在的模型形参是控制跟生成跟模型一样的原材料,所以函数只对形参有影响,对实参无改变。

     

    列个例子,从某个网站看的面试题

    public class Tester{
    public static void main(String[] args){
       Integer var1=new Integer(1);
       Integer var2=var1;
       doSomething(var2);
       System.out.print(var1.intValue());
       System.out.print(var1==var2);
    }
    public static void doSomething(Integer integer){
        integer=new Integer(2);
        }
    }

    结果

    1true

    1.这里var1先new 了一个对象Integer 1

    2.然后让var2指向var1这个引用,也就是指向了integer 1

    3.接着调用了doSomething(var2);       注意var2现在是模型,也就是实参,doSomething这个打印机只根据这个模型的样子制造了新的材料,integer,所以这时候integer是指向跟var2一样指向integer 1

    4.然后就开始执行integer=new Integer(2);这时候integer引用指向了新的对象Integer(2);

    5.也就是说从始至终var2只是提供了一个模型的功能,不参与函数内部过程。所以var2无改变还是指向integer 1

    而改变的是integer从一开始的指向integer 1,到新new一个对象  指向了Integer(2);

    直接把其中一个解析拉过来看吧 我感觉讲的挺好  @anhoulin

    image


    总结:对象传递,是引用传递,改变方法外原来的对象。所以调用方法会改变原来的对象参数。

              值传递,不会改变方法外原来的参数,所以需要设置返回值接收改变后的状态。

    展开全文
  • Java实参与形参

    2017-01-05 09:37:11
    Java参数,不管是原始类型还是引用类型,传递的都是副本(有另外一种说法是传值,但是说传副本更好理解吧,传值通常是相对传址而言)。 如果参数类型是原始类型,那么传过来的就是这个参数的一个副本,也就是这个原始...
    Java参数,不管是原始类型还是引用类型,传递的都是副本(有另外一种说法是传值,但是说传副本更好理解吧,传值通常是相对传址而言)。 如果参数类型是原始类型,那么传过来的就是这个参数的一个副本,也就是这个原始参数的值,这个跟之前所谈的传值是一样的。如果在函数中改变了副本的
     值不会改变原始的值. 如果参数类型是引用类型,那么传过来的就是这个引用参数的副本,这个副本存放的是参数的地址。如果在函数中没有改变这个副本的地址,而是改变了地址中的
     值,那么在函数内的改变会影响到传入的参数。如果在函数中改变了副本的地址,如new一个,那么副本就指向了一个新的地址,此时传入的参数还是指向原来的 地址,所以不会改变参数的值。
    
    展开全文
  • Java实参与形参,值传递与引用传递 java的形参与实参 public static void main(String args[]){ int a=0; //a实参 test(a); System.out.println(a); } //test(形参类型 形参名) public static void test(int...

    Java实参与形参,值传递与引用传递

    java的形参与实参

      public static void main(String args[]){
          int a=0; //a实参
    	  test(a);
          System.out.println(a);
      }
      //test(形参类型  形参名)
      public static void test(int a){
         a=1;
      }
    

    上述代码运行后,输出为0,为什么对a进行修改后并没有变,是因为调用方法进行传参时分为值传递与引用传递。如果参数的类型是基本数据类型,那么就是值传递,如果是引用数据类型,那么就是引用传递,值传递是实参把自己变量本身存的简单数值赋值给形参,引用传递是实参把自己变量本身存的对象内存地址值赋值给形参,上述代码只是简单的值传递,所以无法改变原本变量的值,我们再看下面的例子。

    public class Demo2 {
    	public static void main(String[] args) {
    		Animal a=new Animal();
    		System.out.println(a.name);
    		updateName(a);
    		System.out.println(a.name);
    	}
    	public static void updateName(Animal a) {
    		a.name="bb";
    	}
    }
    class Animal{
    	String name="aa";
    }
    

    输出结果为:
    aa
    bb
    即值传递不会改变变量本身,引用传递会修改变量。

    基本数据类型:
    char, byte, short ,int ,long, float, double,boolean

    展开全文
  • 一、实参形参先扯一段代码public static void swap(int a,int b) { int tmp = a; a = b; b = tmp; System.out.println("swap方法中,a的值是"+a+",b的值是"+b); } public static...

    一、实参和形参

    先扯一段代码

    public static void swap(int a,int b) {
    	        int tmp = a;
    	        a = b;
    	        b = tmp;
    	        System.out.println("swap方法中,a的值是"+a+",b的值是"+b);
    	    }
    
    	    public static void main(String[] args) {
    	        int a = 6;
    	        int b = 9;
    	        swap(a,b); // swap方法中,a的值是9,b的值是6
    	        System.out.println("交换结束后,a的值是"+a+",b的值是"+b); // 交换结束后,a的值是6,b的值是9
    	        // 传参数相当于复制,swap中的a、b是复制品
    	    }

    嗯,就这个,swap(int a,int b)这个里头的a,b就是形参,,然后main方法里头的a,b就是实参了。那么问题来了,为啥这样子呢。下面上专业的解释:

    形参

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

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

    实参

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

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

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


    嗯,大概就这么个回事

    二、值传递和引用传递

    还是刚那个代码

    public static void swap(int a,int b) {
    	        int tmp = a;
    	        a = b;
    	        b = tmp;
    	        System.out.println("swap方法中,a的值是"+a+",b的值是"+b);
    	    }
    
    	    public static void main(String[] args) {
    	        int a = 6;
    	        int b = 9;
    	        swap(a,b); // swap方法中,a的值是9,b的值是6
    	        System.out.println("交换结束后,a的值是"+a+",b的值是"+b); // 交换结束后,a的值是6,b的值是9
    	        // 传参数相当于复制,swap中的a、b是复制品
    	    }

    这个就是值传递,就只是传递的是值

    public class DataWrap {
        int a;
        int b;
    }
    public class Test{ // 引用传递
        public static void swap(DataWrap dw) { // 复制一个dw的引用,指向对象
            int tmp = dw.a;
            dw.a = dw.b;
            dw.b = tmp;
            System.out.println("swap方法中,a的值是"+dw.a+",b的值是"+dw.b);
            dw = null; // 把它杀掉
        }
    
        public static void main(String[] args) {
            DataWrap dw = new DataWrap();
            dw.a = 6;
            dw.b = 9;
            swap(dw);//swap方法中,a的值是9,b的值是6
            System.out.println("交换结束后,a的值是"+dw.a+",b的值是"+dw.b);//swap方法中,a的值是9,b的值是6
        }
    }

    这个就是引用传递,传递的是内存地址,内存地址所指向的内容如果变了,内容也会跟着变的





    展开全文
  • 实参形参的定义:形参出现函数定义中,在整个函数体内都可以使用,离开函数则不能使用。实参出现在主函数中,进入被调函数后,实参变量也不能使用。形参实参的功能是做数据传送。发生函数调用时,主调函数把实参...
  • 值传递 引用传递 根本区别 会创建副本(Copy) 不创建副本,直接引用 效果 函数中无法改变原始对象 函数中可以改变原始对象 Java 中的实参与形参之间的传递到底是值传递还是引用传递呢? 其实之前我和大多数人一样...
  • 实参形参的定义: 形参出现函数定义中,在整个函数体内都可以使用,离开函数则不能使用。 实参出现在主函数中,进入被调函数后,实参变量也不能使用。 形参实参的功能是做数据传送。发生函数调用时,主调函数...
  • java实参与形参

    2020-06-28 21:00:44
    java实参与形参 形参和实参,举个例子public class Example{ int a; public static void main(String args[]){ Example example = new Example(); example.change(example.a); System.out.println(example.a); } ...
  • 值传递 引用传递 根本区别 会创建副本(Copy) 不创建副本,直接引用 效果 函数中无法改变原始对象 函数中可以改变原始对象 Java 中的实参与形参之间的传递到底是值传递还是引用传递呢? 其实之前我和大多数人一样...
  • Java C 方法中实参形参与指针联系的分享Java 形参为基本类型Java 形参为类对象C/C++ 形参为基本类型C/C++ 形参为结构体C/C++ 形参为基本类型指针C/C++ 形参为结构体指针讨论结果图示因为不是计算机专业,在大学时...
  • 值传递 引用传递 根本区别 会创建副本(Copy) 不创建副本,直接引用 效果 函数中无法改变原始对象 函数中可以改变原始对象 Java 中的实参与形参之间的传递到底是值传递还是引用传递呢? 其实之前我和大多数人一样...
  • [Java 思考] Java 中的实参与形参之间的传递到底是值传递还是引用传递呢?科普:值传递 (pass by value) 是指在调用函数时将实际参数复制一份传递到函数中, 这样在函数中如果对参数进行修改, 将不会影响到实际参数....
  • 第17题:某软件项目的活动图如下图所示,其中顶点表示项目里程碑,连接顶点的边表示包含的活动,边上...17:A.11B.1 5C.16D.1818:A.0 和 7B.0 和 11C.2 和 11D.2 和 11答案解析讨论:www.cnitpm.com/st/...
  • 这两天和一个朋友和我讨论了一个面试题,是形参与实参的问题。一个很有意思的小问题,一开始有些乱后来想想就明白了,所以我就对java参数传递做一个总结,以加深自己的基础知识。形参实参的区别形参就是形式参数,...
  • 文章目录数据和变量的分类数据是怎么存的实参与形参引用传递和值传递值传递引用传递结合存储方式做理解特殊情况 数据和变量的分类 首先,我们需要大概明白,java中的数据类型分为两类,基本类型与对象类型(一些特殊...
  • 2、Java参数传递的机制规则参数 —》基本数据类型—》实参真实存储的数据值参数 —》引用数据类型—》实参存储数据的地址值3、值传递引用传递的区别值传递:真实的数据值—》改变副本不影响原变量方法调用时,实际...
  • 一、实参与形参 1.代码引入01 package com.yingcan_and_shican; public class Demo_JiBenShuJu { public static void main(String[] args) { int a=10; System.out.println("打印主方法中的a="+a); print...
  • Java语言的方法 实例 public class MethodTest01(){ public static void sum(int a,int b){ System.out.println(a+"+"+b+"="+(a+b)); //调用doSome方法 MethodTest.doSome(); } //主方法 public static ...
  • java形参与实参

    2021-03-30 10:34:00
    相当于将实参的值赋值给实参 不同数据类型时实参形参可以进行自动类型转换,否则进行强制类型转换。
  • char *a; *a="china";功能等价。 (4.0分)【其它】设计一个一维数组的排序函数p_sort,并调用它对10个整数进行排序。p_sort函数原型如下: void p_sort(int *p,int n) 其中,p是指向int型一维数组的指针变量,n是数组...
  • Java C 方法中实参形参与指针联系的分享Java 形参为基本类型Java 形参为类对象C/C++ 形参为基本类型C/C++ 形参为结构体C/C++ 形参为基本类型指针C/C++ 形参为结构体指针讨论结果图示 因为不是计算机专业,在大学...

空空如也

空空如也

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

java实参与形参

java 订阅