首页 热点专区 义务教育 高等教育 出国留学 考研考公

java 参数传递问题

发布网友 发布时间:2022-04-25 10:44

我来回答

5个回答

热心网友 时间:2024-11-03 06:03

Java的参数传递总结:

JAVA的参数传递总是传"值",但是传值方式也分为两种方式,它们是靠传递参数的类型区分的。这两种类型分别为JAVA的基础类型和Object(对象)类型;基础类型包括boolean,byte,short,char,int,long,float,double,而Object就是对象,如数组.在参数为基础类型时,见代码:
public class A{
public static void main(String arg[]){
int a=3;
method1(a);
System.out.println(a);
}
public static void method1(int a){
a=4;
}
}
此时结果的输出将是1,而且只要你的值在Main函数中没变,a的值不管怎么传都不回变,这是因为a是传值,而这个"值"是a的一个拷贝,a的值在传递后的改变只是改变了a的拷贝的内容,并没有改变真正的a的值;对于参数为对象
public class A{ public class A{
public static void main(String arg[]){ public static void main(String arg[]){
int[] a=new int[1]; int[] a=new int[1];
a[0]=3; a[0]=3;
method1(a); method1(a);
System.out.println(a[0]); System.out.println(a[0]);
} }
public static void method1(int[] a){ public static void method1(int[] a){
a[0]--; a=new int[0];
} a[0]=4;
} }
}
左边的结果将是2,右边的结果将是3(未变),原因是:在传递的参数为对象时,这个传递的"值"中放的内容实际上是对向所在的地址,左边的情况是指针定位到对象的地址后,在上面把内容给改了,所以数组的值后会改变,而右边的情况为给对象新分配了一个指针到新的地址上面去,所以所有的操作都在新的地址上面,并不会影响原来的值。注:对于String,Interger,Boolean,Double等的系统对象,它们虽然是Object,但是任何方式的传递参数的值得改变并不会影响原来的值。

热心网友 时间:2024-11-03 06:03

左边是传值,右边是传引用。不一样的。

热心网友 时间:2024-11-03 06:03

跟你上边的问题一样 ,换一种方法说
swap(int a, int b)这么写的话
在方法内部操作的a和b跟你传入的那两个数字,虽然值一样,但不是同一个东西,所以即便交换完了也不会影响到原来的。
swap(int[] arr) 这么写,因为传递的是一个对象引用,所以对这个对象的操作会反映到原对象上面 交换就成功了

热心网友 时间:2024-11-03 06:05

java中传递参数分为两种:一种是传值(基本类型),一种传引用(对象)。
图1中只是把数组中两个值传给了两个参数,并且通过中间变量进行交换,并未把交换后的值返回给对应的数组变量中,所以输入的结果是并未改变。
图2中是把整个对象的引用传给了数组参数,实际上main方法中的a数组变量和swap方法中a数组变量,引用的是同一个存储空间(位于堆中)。所以只要swap对a数组变量改变,对应的main方法中的数组变量值也会改变。

热心网友 时间:2024-11-03 06:01

这是java方法参数传递的机制
前面那个图传递的是值的副本,无论在方法内部怎么变换,改变的只是它的副本,而它本身在main方法中并没有发生任何变化。所以不会交换。
而数组,参数传递的是引用的副本。就是说栈里存放的是一个引用,这个引用指向堆里的数组数据。而方法传递就传递这个引用的副本,这个副本一样指向堆里的数组的数据。
在方法中按照引用的副本查找到数组并把它的数据交换了,直接对堆中的数据做了变化。所以出了这个方法,在原引用指向的堆内的数据已经发生了变化。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com