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; }}
------解决方案--------------------