Java是值传递还是引用传递,值传递和引用传递的区别 java

  Java是值传递还是引用传递,值传递和引用传递的区别 java

  这篇文章已经给大家带来了一些关于java的知识,主要是关于java是值传递还是引用传递。下面就来看看吧,希望对你有帮助。

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

  目的:验证Java语言是值传递还是引用传递以及Java参数传递的实现原理。

  问题介绍:

  首先阅读代码片段:

  公共静态void main(String[] args){

  人p=新人(张三);

  f(p);

  System.out.println(参数: p );}public static void f(Person p){

  P.name=李四;

  system . out . println( parameter: p );}我们将一个对象变量传递到方法中,然后在方法中修改对象的属性,并打印变量和参数。从表面上看,变量和参数的值都被修改了。Java也支持引用传递吗?

  在

答案是:Java语言只支持值传递,不支持引用传递.
验证Java参数传递之前,我们应该先了解一下函数值传递和引用传递的区别。

  按值传递是指在调用函数时制作实际参数的副本,并将其传递给函数,这样,如果在函数中修改了参数,实际参数就不会受到影响。按引用传递是指调用函数时直接将实参的地址传递给函数,所以函数中参数的修改会影响实参。可见,值传递和引用传递的区别在于形式参数的修改是否会影响实际参数。

  

1.基本数据类型的参数传递

  我们将一个基本的数据类型传入方法,然后在方法中修改参数的值,发现参数的修改并不影响实际的参数。

  公共静态void main(String[] args){

  int a=1;

  f(p);

  System.out.println(参数: a );}public static void f(int a){

  a=2;

  system . out . println( parameter: a );}

2.引用数据类型的参数传递

  在问题引入的例子中,似乎是参数的修改影响了参数,但是只要我们创建一个新的对象,赋给参数,然后打印参数和参数,两者是不会相互影响的。说明Java不符合引用传递。

  公共静态void main(String[] args){

  人p=新人(张三);

  f(p);

  System.out.println(参数: p );}public static void f(Person p){

  p=新人(‘李四’);

  system . out . println( parameter: p );}

3.原理

  要理解为什么会出现这些现象,我们必须了解Java背后的基本原理:

  JVM被分成许多块,我们创建的对象放在堆中,而基本数据类型和局部变量放在堆栈中。传递基本数据类型时,会创建数据的副本并将其传递给方法,因此参数的修改不会影响实参,如图所示:

  因为对象是放在堆里的,所以我们只能用对象的引用来操作这个对象。

  当一个对象引用被传递给一个方法时,它实际上创建了一个引用副本,同时指向同一个对象。当通过形参引用和操作一个对象时,实际的实参似乎发生了变化。其实对象的内容变了,但是对象变量没变,实际的参数本身没变。所以不难理解问题中介绍的例子。

  当我们重新分配参数时,参数不会受到影响。此时,实参和形参已经指向了两个不同的对象。

  所以Java只支持值传递。

  推荐:《java视频教程》以上是一起分析java是值传递还是引用传递的详细内容。更多请关注我们的其他相关文章!

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

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