精华内容
下载资源
问答
  • 值传递引用传递

    千次阅读 2008-01-31 16:31:00
    JAVA的参数传递也就不存在什么引用传递了(因为JAVA根本不支持引用),一切都是值传递。 关于简单类型,很好理解,就是拷贝一个值给被调方法。 这个值一旦拷贝完毕,就和原来的变量脱离一切关系。 所以,如论参数...
     public   class   test   
          
    int   a   =   3
          
    public   void   plus(int   b)
            b     
    =   b+1
            }
     
            
    public   static   void   main(String   args[]) 
          

            test   t   
    =   new   test(); 
            t.plus(t.a); 
            System.out.println(t.a); 
          }
     
          }
     
     传值就相当于你把你的文件拷贝到另一个地方,你对你所拷贝的文件(和源文件有一模一样的信息)做什么都不会影响源文件
    传引用就相当于你把该文件创建个快捷方式(差不多),你打开了,修改了,也就修改了
    public   class   test   
          
    int   a   =   3
          
    public void add(){
              a
    =a+1;
          }

          
          
    public   void   plus(test   b)
           b.add();
            }
     
            
    public   static   void   main(String   args[]) 
          

            test   t   
    =   new   test(); 
            t.plus(t); 
            System.out.println(t.a); 
          }
     
     }
     
    下面我要阐述一下为什么你的代码是3而我的代码是4,JAVA存储变量有两种形式:
    (1)一种是基础类型(int,long)类型以及自定义类型不用new关键字的(User   u;)
    (2)另一种是用New的(User   U=new   User();)
    这两种方式有很大的不同,第一种方式存储对象在JVM   pool里面,第二种方式存储在JVM   Heap里面,你错就错在对JVM   pool的运行机理不了解,pool中的数据一旦创建无法人为删除,只能通过gc定期删除,所以int   i=5;   i=6;新创建6,i指向新的6,但是5依然存在,只不过没有引用指向它了,等待gc将其回收。

    楼主吧t.a传给了t.plus();传的是我说的第一类对象,因为在t里面,a=3;定义的,在plus里面,形势参数被指向4(因为3+1)并不是覆盖3的位置,而是新创建一个空间存4,此时形势参数t指向4,外面的实际变量t还指向3相当于函数里外各有一个t分别指向3,4;虽然是把3的地址传进函数去了,但是地址的内容被复制了,所以看起来与传值方式效果相同,JAVA这点好:虽然只保留一种传值方式,还能用这种方式的巧妙变化模拟出另一种方式的效果。

    至于我那个例子,就是采用第二种方式,我传的对象在heap里,对heap里的数据更改,就是覆盖原有的位置而不复制,那么自然结果就是4。

    在JAVA里根本没有传值这个概念,所有的东西都是引用(内存地址),但是可以通过JAVA特有的复制替代原理用引用模拟实现与传值相同的效果。
    JAVA的参数传递也就不存在什么引用传递了(因为JAVA根本不支持引用),一切都是值传递。

    关于简单类型,很好理解,就是拷贝一个值给被调方法。
    这个值一旦拷贝完毕,就和原来的变量脱离一切关系。
    所以,如论参数在方法内如何被改变,方法外的变量是永远不变的,因为它们是两个完全无关的变量。

    关于对象(即类的实例),传值方式和简单类型精确一致。
    但不同的是,被赋予一个对象的变量本身并不包含这个对象,而只是包含该对象的地址。
    所以,传值的时候,会把变量的拷贝(即对象地址的拷贝)传给被调方法;这样做的结果是,两个变量指向同一个对象。
    在方法内部,虽然你不能改变方法外的那个变量,但因为参数获得了那个变量所指的对象的地址,所以,它可以操作原来变量所指的那个对象。

    可以把对象比作电视机,对象引用比作遥控器。
    现在我需要让屋子里的另一个人也可以和我一样操作电视机,我会给他一个和我手上一模一样的遥控器,但不是给他一台新的电视机。
    于是,两个人都可以同时操作同一台电视机了,这就是地址传递。

    但是,如果他把遥控器拿到另一间屋子去操作另一台电视机了,我手上的遥控器不会受丝毫影响,因为,我只是给他一个拷贝,我自己的还是自己的。
    所以,这既是地址传递又是值传递。
    “地址”是指对象的地址,“值”是指地址的值。这就是JAVA的参数传递。
    展开全文
  • C++ 整形 值传递 引用传递 指针传递

    简单明了


    #include<iostream>

    using namespace std;
    //值传递
    void change1(int n){
        n=1;
    }


    //引用传递
    void change2(int & n){
        n=2;          //注意此处,光秃秃的一个n
    }
    //指针传递
    void change3(int *n){
        *n=3;         //注意此处有*

    int     main(){
        int n=0;
        change1(n);
        cout<<"after change1() n="<<n<<endl;
        change2(n);            //注意此处,光秃秃的一个n
        cout<<"after change2() n="<<n<<endl;
        change3(&n);          //注意此处有&
        cout<<"after change3() n="<<n<<endl;
        return true;

    }



    运行结果:

    0

    2

    3



    展开全文
  • 当对内置类型的值进行引用传递,其相对于值传递多了一次寻址操作,最终还要通过指针(引用传递过来的)访问内存中的值。 如果在函数中多次用到这个内置类型变量,可能就多次访问寄存器(按值传递),或者多次访问内存...
    • 对于一般的类对象而言,值传递方式会调用多次构造函数和析构函数。
      引用传递的方式则回避了所有构造和析构动作。

    • 当采用值传递的方法时,可能会造成切割问题

      • 如将子类对象值传递到基类类型中去,子类特有的部分将被切割掉。
    • 引用传递,真正传递的是指针

      • 当对内置类型的值进行引用传递,其相对于值传递多了一次寻址操作,最终还要通过指针(引用传递过来的)访问内存中的值。
      • 如果在函数中多次用到这个内置类型变量,可能就多次访问寄存器(按值传递),或者多次访问内存(按引用传递)。在这种情况下按值传递更优?因为这种情况下按值传递只需要访问一次内存。
    • Reference:
      C++吧
      Blog

    展开全文
  • Java 值传递 引用传递

    2011-10-27 13:55:46
    Java 值传递 引用传递   Java中除了八大基本数据类型以及相对应的封装类和String类型,是值传递已外,其他都是引用传递

     Java 值传递 引用传递

     

    Java中除了八大基本数据类型以及相对应的封装类和String类型,是值传递已外,其他都是引用传递。

    展开全文
  • java 值传递 引用传递
  • java中形参和实参的区别(值传递 引用传递) 形参和实参的区别 形参 就是形式参数,用于定义方法的时候使用的参数,用来接收调用者传递的参数。形参只有在方法被调用的时候,虚拟机才会分配内存单元,在方法调用...
  • 下图 这个java 关于值传递 引用传递的问题 大神详细解释一下 为什么会是这样 谢谢 ![图片说明](https://img-ask.csdn.net/upload/201712/08/1512663091_608794.png)
  • 可能是值传递,也可能是引用传递(地址值)例子: var a={name:1,age:12}; function fn(obj){ obj={age:15} } fn(a); console.log(a.age);//a=12简单地说就是实参跟形参其实是两个变量,例如: var a=12, b; b=a...
  • 基本数据类型和String的构造两种方法都是值传递
  • 引用是C++中的概念,初学者容易把引用和指针混淆一起。一下程序中,n是m的一个引用(reference),m是被引用物(referent)。  int m;  int &n = m; n相当于m的别名(绰号),对n的任何操作就是对m的操作。例如...
  • Java 值传递 引用传递

    千次阅读 2010-09-03 12:50:00
     // 初始为0   protected int num = 0;     // 为方法参数重新赋值   public void change(int i) {   i = 5;   }     // 为方法参数重新...
  • java中的参数传递(只有值传递没有引用传递

    万次阅读 多人点赞 2019-07-31 19:25:14
    Java中只有传值调用(值传递),没有传址调用(址传递或者引用传递)。所以在java方法中改变参数的值是不会改变原变量的值的,但为什么改变引用变量的属性值却可以呢?请看下面的解答。 java中的数据类型 Java中...
  • 举例: 一个包工头让一个工人去修路, 包工头给工人一个铁锹工具,这是值传递; 传递一个具体的数据。 包工头还要告诉工人:接着修我们上次没有修好的淮河路,这个“淮河路” 就是传的...
  • 首先值传递引用传递的区别就不多说了 ,相关的在很多人的博客都有解释且很详细:http://www.blogjava.net/jiafang83/archive/2007/10/23/155412.html 但有一种写法,在主类中 定义一个如下方法: package ...
  • java 值传递 引用传递

    2008-10-24 01:54:00
    Java代码 public class ParamTest { // 初始为0 protected int num = 0; // 为方法参数重新赋值 public void change(int i) { i = 5; } // 为方法参数重新赋值 public void chang
  • 背景: 做项目的时候,将一个空对象的引用传入到方法中,期待方法里面创建一个新的对象给这个引用,后面就可以拿着这个对象用了。  可结果就是,定义在外面的对象引用并没有拿到这个引用 demo.java ...
  • 根据传递方法的不同分成两大类整理,分别为继承自C的值传递以及C++新增的引用传递。 一、值传递 先看两行再简单不过的代码: int a = 10; int b = a; 这是用一个变量去给另一个变量赋值的代码,经过这种...
  • 函数中值传递还是引用传递 其实,python函数参数传递可以理解为就是变量传值操作 不可变对象参数调用 def ChangeInt( a ): a = 10 nfoo = 2 ChangeInt(nfoo) print nfoo #结果是2 有一个int对象2,和...
  • 值传递引用传递

    2017-09-24 00:48:21
    值传递引用传递
  • 语句注释去掉,最终会返回 null,因为 Java 是值传递而不是引用传递。 总结以上示例: ①: finally块的语句在try或catch中的return语句执行之后返回之前执行且finally里的修改语句可能影响...
  • java值传递 引用值传递
  • 值传递引用传递的区别

    万次阅读 多人点赞 2019-01-08 14:41:42
    引用传递:针对于基本类型进行封装,对封装进行传递,是引用传递 代码:值传递(int类型) public class Test { public static void main(String[] args) { int int1 = 10; int int2 = int1; System.out...
  • JavaScript的值传递引用传递

    千次阅读 2017-08-09 14:13:42
    JavaScript 值传递 引用传递
  • C语言值传递 地址传递 引用传递 程序运行环境:Dev C++ C语言参数传递方式: 值传递(swap1函数) 地址传递(swap2函数) 引用传递(swap3函数) #include<stdio.h> #include<windows.h> void swap1(int,int);...
  • (一)Java 值传递 引用传递 (二)Javascript 值传递 引用传递
  • 传递与引用传递值传递引用传递注意雷区 值传递 基本数据类型作为参数的方法调用 实参给形参传递数据的方式,直接将值复制一份给形参,实参和形参在内存上两个方法中的 互相独立的局部变量 不涉及到引用对内存中的...
  • 引用传递: 传递的是地址,两个变量的地址相同,所有属性相同,我们也可以把这两个变量认为一个变量 下面是问题 放在位置1 user对象new了一次 放在位置2 user对象new了res.size()次 User user=new User();//*****...
  • 值类型和引用类型 与引用类型相对的是值类型。 值类型 当把一个值类型赋给另外一个时,就是对字段成员逐一进行复制,此时在栈上...按值传递引用类型 回顾一下形参和实参 在一般传值调用的机制中只能把实参...
  • 1、值传递 在方法的调用过程中,实参把它的实际值传递给形参,此传递...引用传递弥补了值传递的不足,如果传递的数据量很大,直接复过去的话,会占用大量的内存空间,而引用传递就是将对象的地址值传递过去,函数接...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,601
精华内容 9,040
关键字:

值传递引用传递