java中参数如何传值,java 传值 传引用

  java中参数如何传值,java 传值 传引用

  众所周知,基本上有两种传值方式:值传和引用传。那么在JAVA中,是值传递还是引用传递呢?下面的文章就给你介绍一下,希望对你有所帮助。

  如何解决写爬虫IP受阻的问题?立即使用。

  值传递:是指在调用函数时复制实参的副本并传递给参数,这样函数中对参数的修改就不会影响实参的值。

  引用传递:表示函数调用时实参的地址直接传递给参数,所以函数中参数的修改会影响实参的值。

  java怎么传值?

  Java的传值方式:传值(所有的修改都限制在方法体,方法体出了任何修改操作都不再有效)。【推荐学习:java课程】

  我们可以用一个程序来验证在Java中只传递值。

  /**

  *验证在java中只传递值

  */

  类别用户{

  私有字符串名称;公共字符串getName(){ return name;

  } public void set name(String name){ this . name=name;

  }

  }公共类test value { public static void change(User User 2,int a2){

  System.out.println(更改前: user2.getName(),a2= a2 );

  2.user2.setName(李四);//更改user2的名称值

  a2=10//更改a2的值

  System.out.println(更改后: user2.getName(),a2= a2 );

  user2=新用户();//将user2重定向到新对象

  2.user2.setName(王五);

  System.out.println(再次指向新对象后: user 2 . getname()));

  } public static void main(String[]args){

  用户user1=新用户();

  1.user1.setName(张三);//用张三的名字初始化user1

  int a1=5;//用值5初始化a1

  change(用户1,a1);//调用方法来验证值传递方法。

  System.out.println(调用方法后: user1.getName(),a1= a1 );

  }

  }运行这个程序,输出结果是:

  变化前:张三,a2=5

  变化后:李四,a2=10

  之后又指向了一个新的对象:王五

  方法被调用后:李四,a1=5结果分析

  让我们借助上图来分析一下这个程序。首先我们定义一个用户类,然后在测试类中实例化一个名为user1的用户对象,并赋予其name=张三。

  此时,如图1所示,在内存中实例化一个对象,相当于在堆中打开一块内存,内存地址为017。此时这个对象的引用是内存地址为001的user1,它将这个对象的地址保存在内存中,也就是指向这个对象。

  接下来,我们调用方法change()来尝试更改user1的名称值,以验证java中的值传递方法。

  我们将user1作为参数传递给change()方法,形参user2接受这个参数,这说明了两种传递参数方式的区别。如果它是通过值传递的,那么它就是定义好的。

  如图2所示,user2是user1的副本,也就是说,在传递参数时,user1(是对一个对象的引用)被复制,它被命名为user2,也是对一个对象的引用,此时user1和user2指向同一个对象。

  如果是按引用传递的话,按照定义,如图5,传递参数的时候,直接把user1传递给参数,只是名字改成了user2,但本质上user1和user2其实是一样的。它是对一个对象的引用。

  然后,分析输出结果。不管是传值还是传引用,第1行的输出结果一定是张三,因为都指向同一个对象。对于第2行的输出,我们还是无法判断是哪种方式,因为都是改变同一个对象,值也会改变;关键在于3号线和4号线的输出。

  此时,我们将user2重新指向一个新对象,并将name= Wang Wu 赋给这个对象。如果它是通过引用传递的,那么user1也会改变它的指向,指向新的对象。调用最后一行的方法后,输出结果会像第三行一样是王五,但实际输出的是李四。这表明用户1和用户2实际上并不相同。

  真正的调用过程如图2~图4所示,这样在user2指向一个新对象后,user1所指向的对象并没有改变,仍然是原来的对象。

  对于基本类型的参数,a1的值最终没有改变,表明在执行该方法时,a2是a1的副本。

  对于引用类型的参数,比如User object,在调用方法的时候,实际上引用的是user1作为实际参数,所以引用的一个副本引用的是user2,虽然说这是两个引用(像a1和a2的关系)。

  但是指向同一个对象,所有操作都是针对同一个对象的。

  尾声

  通过以上分析,我们可以知道。Java中只有值传递这一种方式,只是对于引用类型,传递的参数是对象的引用。java就是这样传递值的。更多详情请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: