日期:2014-05-20  浏览次数:20697 次

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方法获取和设置其值,这样就行了。
------解决方案--------------------
探讨
二楼的,
还有哪些类型是引用传递的,哪些是值传递的,

------解决方案--------------------
探讨
除了基本数据类型之外其它都是引用传递

------解决方案--------------------
引用传递 ,即 (数组、对象引用),才可以修改,即对数组的元素修改,那么 会影响 , 对对象的属性修改,也会影响;
对于基本类型,则不会 ,因为作为参数的基本类型是原来的一份拷贝 ,而引用不是
------解决方案--------------------
探讨

4楼的,怎么用private 来改变j的值呢,

------解决方案--------------------
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 Test3 {
private static int j;

public static void main(String[] args) {
int ary[] = { 20, 29, 21, 45, 68, 15, 3 };
j = ……

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

------解决方案--------------------