java参数传递只存在值传递,java的参数是值传递还是引用传递

  java参数传递只存在值传递,java的参数是值传递还是引用传递

  为什么可以改变引用变量的属性值?请看下面的回答。

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

  java中的数据类型

  Java数据类型分为两类:基本类型和引用类型。相应地,变量可以分为两种类型:基本类型和引用类型。

  type的基本变量持有原始值,即它所代表的值就是数值本身;

  引用类型的变量保存的值就是引用值,‘引用值’指向内存空间的地址,它代表的是一个对象的引用,而不是对象本身,它存储在这个引用值所代表的地址上。

  基本类型包括:byte,short,int,long,char,float,double,boolean,返回地址。

  类型包括:类、接口类型和数组。

  java中只有值传递

  在日常编码中,我们经常会看到以下现象:

  1.对于基本类型参数,在方法体中重新分配参数不会改变原始变量的值。

  2.对于引用类型参数,在方法体中重新引用参数不会改变原始变量持有的引用。

  3.参数是在方法体中计算的,原始变量的值不会改变。

  4.对于引用类型参数,在方法体中操作参数所指向对象的属性,会改变原变量所指向对象的属性值。

  例如:

  公共类Main {

  私有静态void getMiddleOne(boolean b,boo,Boolean[] arr){

  b=真;

  boo=new Boolean(真);

  arr[0]=true;

  }

  //测试

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

  布尔b=假;

  Boolean boo=new Boolean(false);

  Boolean[]arr=new Boolean[]{ false };

  getMiddleOne(b,boo,arr);

  system . out . println(b);

  system . out . println(boo . tostring());

  system . out . println(arr[0]);

  /**

  *输出:

  *错误

  *错误

  *正确

  */

  }

  }我们只要了解了下面两点就可以解答上面的现象了:

  1.基本数据类型的值是数值本身,所以例子中B的值为false;类可以自动装箱和拆箱,所以可以像基本类型一样对待,所以例子中boo的值为false;数组是引用类型,所以arr的值是对布尔值[]的引用。

  2.java中只有值传递没有引用传递,所以传入getMiddleOne方法的三个参数分别是B的值副本、boo的值副本和arr的值副本。

  从上面两点可以清楚,getMiddleOne方法中执行的b=true和boo=new Boolean(true)都是给自己的副本赋新值,所以不改变原变量的值;类似地,arr[0]=true将true复制到arr副本指向的数组的第一个元素。arr的值和arr的副本都是对这个数组的引用,所以arr的副本指向的数组和arr指向的数组是一样的,所以改变arr的副本的数组的元素也会影响原来的变量arr。

  总结

  在java中,只传递值,基本类型传递值的副本,引用类型传递引用的副本。这就是java中参数传递的细节(只传递值不传递引用)。请关注其他相关文章!

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

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