java中,方法改变一数组值和一数值,在线等
java文件中
import java.util.Arrays;
public class Tch {
public static void main(String[] args) {
int ary[] = { 20, 29, 21, 45, 68, 15, 3 };
int j=10;
select(ary,j);
System.out.println(Arrays.toString(ary));
System.out.println(j);
}
public static void select (int[] ary,int j){
ary[0] = 12;
j=13;
}
}
现问:(1)在main方法中,调用select 方法,结果 ary是改变了,可j还是10,这是为什么?
(2)怎么样改变j的值呢,不用函数返回的思路
------解决方案--------------------1、给方法传递的参数可以理解为指针,调用方法时这个指针会复制一份。所以调用方法给指针重新赋值时不能改变指针原来的值,而当修改指针所指的地址的数据时会修改。
2、通过调用方法给j重新赋值是不能改变j的值的。
------解决方案--------------------ary是引用传递,j是值传递
------解决方案--------------------A1: ary是引用传递,j是值传递;
A2: 我觉得可以把j向外拉一层,作为class Tch的一个private变量就可以了。
个人陋见...
------解决方案--------------------值传递与引用传参的不同,
如果是把一个基本类型的变量做为一个参数传递到一个方法里,它是把当前的变量拷贝了一份,在方法里改变变量的值不会改原来变量的值,如果把一个对象的引用传递进去,在方法里用引用来改变它的值就是改的原来的
把 j 封装到一个对象里,把这个对象的引用传过去就可以了
------解决方案--------------------(1)sl值传递在JAVA中就是引用传递,传递的引用过去,而在方法内部的j是局部变量,j=13,仅仅是改变了方法内的引用,而传递过来的引用没有改变,当然值是不变的。
(2)可以把j定义为全部变量,通过get,set方法获取和设置其值,这样就行了。
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------引用传递 ,即 (数组、对象引用),才可以修改,即对数组的元素修改,那么 会影响 , 对对象的属性修改,也会影响;
对于基本类型,则不会 ,因为作为参数的基本类型是原来的一份拷贝 ,而引用不是
------解决方案--------------------
------解决方案--------------------private static int j; //需要这样才行
------解决方案--------------------Java code
import java.util.Arrays;
public class Test3 {
private static int j;
public static void main(String[] args) {
int ary[] = { 20, 29, 21, 45, 68, 15, 3 };
j = 10;
select(ary, j);
System.out.println(Arrays.toString(ary));
System.out.println(j);
}
/**
* 此处的ary和main方法的ary指向的是同一个堆内存空间,
* 而j 只是 main中j的一份拷贝
* @param ary
* @param j
*/
public static void select(int[] ary, int j) {
ary[0] = 12;
j = 13;
}
}
------解决方案--------------------
------解决方案--------------------
Java code
import java.util.Arrays;
public class Tch {
public int j = 10;
public static void main(String[] args) {
Tch t = new Tch();
int ary[] = { 20, 29, 21, 45, 68, 15, 3 };
t.select(ary, t);
System.out.println(Arrays.toString(ary));
System.out.println(t.j);
}
public void select(int[] ary, Tch t) {
ary[0] = 12;
t.j=13;
}
}
------解决方案--------------------