初学java,遇一问题,望解答
程序如下
public class J1 {
void f(Boolean[] flag) { //1
if (flag[0] == true)
flag[0] = false;
System.out.println("inner "+flag[0]);
return;
}
public static void main(String[] args) {
Boolean[] flag = new Boolean[1];
flag[0] = true;
J1 test = new J1();
test.f(flag);
System.out.println("outer "+flag[0]);
}
}输出为inner false
outer false
单将程序//1处的函数定义为void f(Boolean flag)
新的程序为
public class J1 {
void f(Boolean flag) {
if (flag == true)
flag = false;
System.out.println("inner "+flag);
return;
}
public static void main(String[] args) {
Boolean flag = new Boolean(true);
J1 test = new J1();
test.f(flag);
System.out.println("outer "+flag); //2
}
}
输出结果为
inner false
outer true
显然这里的Boolean是传值而不是传reference
但我就不懂了,这里的flag是类Boolean的对象,不是说所有函数中的形参是对象的话都是传refenence,这样//2处的flag也该为false呀,输出的结果应该为inner false outer false
但为什么outer 是true怎样才能不用定义flag数组,而实现函数中的boolean值的传引用,就好像c++中形参的&
程序如下
public class J1 {
void f(Boolean[] flag) { //1
if (flag[0] == true)
flag[0] = false;
System.out.println("inner "+flag[0]);
return;
}
public static void main(String[] args) {
Boolean[] flag = new Boolean[1];
flag[0] = true;
J1 test = new J1();
test.f(flag);
System.out.println("outer "+flag[0]);
}
}输出为inner false
outer false
单将程序//1处的函数定义为void f(Boolean flag)
新的程序为
public class J1 {
void f(Boolean flag) {
if (flag == true)
flag = false;
System.out.println("inner "+flag);
return;
}
public static void main(String[] args) {
Boolean flag = new Boolean(true);
J1 test = new J1();
test.f(flag);
System.out.println("outer "+flag); //2
}
}
输出结果为
inner false
outer true
显然这里的Boolean是传值而不是传reference
但我就不懂了,这里的flag是类Boolean的对象,不是说所有函数中的形参是对象的话都是传refenence,这样//2处的flag也该为false呀,输出的结果应该为inner false outer false
但为什么outer 是true怎样才能不用定义flag数组,而实现函数中的boolean值的传引用,就好像c++中形参的&
对从object继承的类是引用调用
对数组的对象是引用调用,而不管是否基本类型注意注意
这种情况你可以通过改变对象本身的属性来改变对象,对象必须是可变对象。比如: void f(StringBuffer strBuf) { //1
strBuf.append("This is added by method f.");
}
这种情况传入的参数就会发生变化,如果你只是使用=不能够改变他