我这里有个代码就是先创建两个Integer型对象,在之后调用方法试着改变他们的值,
最后结果还是:
a = 10
b = 20
class iChange{
void Change(Integer x,int y){
x=218;
y=14;
}
}
public class test{
public static void main(String[] args){
Integer a = new Integer(10);
Integer b = 20;
iChange iTest = new iChange();
iTest.Change(a, b);
System.out.println("a = " + a);
System.out.println("b = " + b);
}
}
一开始看到这个问题,我是想方法里都是空返回类型,自然不会改了。
然后我同学就说,方法的第一个参数是个对象,对象不是引用传递吗?
应该是指向同一地址,在同一地址上修改自然不要用ruturn了。
所以他觉得第一个应该变了,第二个应该没有变。
但是最后输出又是没有更改过。所以感到很奇怪。
后来我查了一下网上找了个相识的题目,
有人的答案是,你方法里面让形参指向一个新对象,对实参无任何影响..
我把这个跟同学说了,然后他贴了个代码
class Box {
float a;
}public class PassObject2 {
static void f(Box y) {
y.a = 2.71828f;
}
public static void main(String[] args) {
Box x = new Box();
x.a = 3.1416f;
System.out.print("1: x.a = " + x.a);
f(x);
System.out.print("2: x.a = " + x.a);
}
}
输出结果是:1: x.a = 3.14162: x.a = 2.71828
说这里参数也是个类,既然能给对象中的变量赋值,像上面那个程序那样为什么又不可以呢?一切总是有原因的,肯定是我的哪个地方想的不对,所以还望各位大大给予帮助

解决方案 »

  1.   

    void Change(Integer x,int y){
    x=218;
    y=14;
    }这个函数没返回值,也不是构造函数,结果肯定不变罗
      

  2.   

    第一个a和b都是指向10和20的地址,虽然你调用了Change方法,但是你没有改变a,b的引用,所以任然是10,20
    第二个同理x指向一个对象Box的地址,你调用f方法的时候是改变了x所指向的那个Box对象里面a的值,所以当你用x.a时,这个a的值已经被你用f方法给改变了。