public class Demo2
{
int a;
int b;
int[] c;
public void print_1() {
a = 1;
b = 2;
int[] c={3};
g(b, c);
System.out.println(a + ", " + b + ", " + c[1]);
}
public void g(int b, int[] c) {
a = 5;
b = 8;
c[1]=4; //为什么会出错?
}
public static void main(String args[]) {
Demo2 d = new Demo2();
d.print_1();
}
}
public class Demo2
{
int a;
int b;
int[] c;
public void print_1() {
a = 1;
b = 2;
int[] c={3};
g(b, c);
System.out.println(a + ", " + b + ", " + c[0]);
}
public void g(int b, int[] c) {
a = 5;
b = 8;
c[0]=4; //这个结果就正确输出
}
public static void main(String args[]) {
Demo2 d = new Demo2();
d.print_1();
}
}
输出结果是:5, 2, 4 作者: 贾存双 时间: 2012-7-10 04:28
因为上面你是初始化给数组分配的空间,就分配了一个空间c[0],所以写c[1]就越界了。
而下面你写c[0]=4就是改变了原来空间里面的值,就是4替换掉了3并保留下来了。作者: 李志广 时间: 2012-7-10 08:21
因为数组下标越界了, int[] c={3},数组中虽然有一个元素,但是他的角标是从0开始的,也就是0、1、2、3、4、、、、。数组的实际长度应该是:arr.length-1才正确,希望我的回答对你有所帮助!{:soso_e100:}作者: 万宝东 时间: 2012-7-10 08:49
public void print_1() {
a = 1;
b = 2;
int[] c={3}; //这里将数组定义成长度为1的数组,里面只有一个元素
g(b, c);
System.out.println(a + ", " + b + ", " + c[1]);
}
public void g(int b, int[] c) {
a = 5;
b = 8;
c[1]=4; //为什么会出错? //这里给数组修改角标为1(第二个元素)的元素,就会数组角标越界,下面的程序修改的是角标为0的元素,就没有问题。
} 作者: 封明川 时间: 2012-7-10 08:52
public class Demo2
{
int a;
int b;
int[] c;
public void print_1() {
a = 1;
b = 2;
int[] c={3}; //你定义的数组里只有一个数,角标是从0开始的
g(b, c);
System.out.println(a + ", " + b + ", " + c[1]);
}
public void g(int b, int[] c) {
a = 5;
b = 8;
c[1]=4; //为什么会出错? 这里的角标是1 了,角标越界了
}
public static void main(String args[]) {
Demo2 d = new Demo2();
d.print_1();
}
}
public class Demo2
{
int a;
int b;
int[] c;
public void print_1() {
a = 1;
b = 2;
int[] c={3};
g(b, c);
System.out.println(a + ", " + b + ", " + c[0]);
}
public void g(int b, int[] c) {
a = 5;
b = 8;
c[0]=4; //这个结果就正确输出
}
public static void main(String args[]) {
Demo2 d = new Demo2();
d.print_1();
}
} 作者: 孙新强 时间: 2012-7-10 10:51
这个程序主要涉及两个问题,一、内存分配;二参数传递。通过g(b,c)方法调用,public void g(int b, int[] c) {
a = 5;
b = 8; //这里是一个值类型传递,结果b的值不会改变
c[0]=4; //这里是一个引用传递 ,首先c[]这个数z子这个方法中只是进行了声明定义,并没有在内存中分配空间,它是根据传递进来的数组空进大小而确定的,因为传递 进来的数组只分配了一个空间大小 所以在此只能引用c[0], 另外,数组是引用类型传递,所 以c[0]结果为4
} 作者: 姬仁贵 时间: 2012-7-11 15:49 本帖最后由 姬仁贵 于 2012-7-11 15:50 编辑
public class Demo2
{
int a;
int b;
int[] c;
public void print_1() {
a = 1;
b = 2;
int[] c={3}; //将3这个元素存入到数组C里面,也就是说c里面就一个元素。
g(b, c); //调用g函数。
System.out.println(a + ", " + b + ", " + c[1]);
}
public void g(int b, int[] c) {
a = 5;
b = 8;
c[1]=4; //因为C数组里面就一个元素,因为数组下表是从0开始的,当数组里就一个元素时数组的下标为0;即C[0]=4;所以在这里c[1]=4会出现角标越界的错误。
}
public static void main(String args[]) {
Demo2 d = new Demo2();
d.print_1();
}
}
public class Demo2
{
int a;
int b;
int[] c;
public void print_1() {
a = 1;
b = 2;
int[] c={3};
g(b, c);
System.out.println(a + ", " + b + ", " + c[0]);
}
public void g(int b, int[] c) {
a = 5;
b = 8;
c[0]=4; //因为这里数组的角标是正确的,所以会输出正确。在这里c[0]=4将4代替为C[0]里面以前的元素。
}
public static void main(String args[]) {
Demo2 d = new Demo2();
d.print_1();
}
}
至于输出结果为什么是:5, 2, 4
因为g(b, c)这条语句里面的b是通过值传递给 public void g(int b, int[] c) 的,
public void g(int b, int[] c) {
a = 5;
b = 8; //这里对b的操作不会影响到print_1()里面的b。
c[0]=4;
}