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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。