public class test {
public static void add3(Integer i){
int val=i.intValue();
val+=3;
i= new Integer(val);
}
public static void main(String args[]){
Integer i= new Integer(0);
add3(i);
System.out.println(i.intValue());
}
}
程序运行结果是0,为什么啊?int型传递的是值本身,不是对象的引用啊
public static void add3(Integer i){
int val=i.intValue();
val+=3;
i= new Integer(val);
}
public static void main(String args[]){
Integer i= new Integer(0);
add3(i);
System.out.println(i.intValue());
}
}
程序运行结果是0,为什么啊?int型传递的是值本身,不是对象的引用啊
Integer i= new Integer(0);
你并没有把,val+=3; i= new Integer(val);的i.intValue()传回来,所以输出的是0了。
在调用的方法里给引用赋值是没有效的 ,因为它传的是地址引用的拷贝
我知道只要把add3的返回类型改为integer可以实现,我想知道还有没有其他方法,并且不改动方法add3。
明白了,但是如果我要把值传回来,
我知道只要把add3的返回类型改为integer可以实现,我想知道还有没有其他方法,并且不改动方法add3。
===========
1)写成一个数组Integer i[1];
2)自己定义一个继承Integer的类: class MyInteger
{
Integer i;
MyInteger(){}
MyInteger(Integer i){this.i=i;}
public void setInteger(Integer i){this.i=i;}
public Integer getInteger(){return i;}
}
然后:
public static void add3(MyInteger i){
int val=i.getInteger().intValue();
val+=3;
i.setInteger(new Integer(val));
}
add3(i)的i 是附给add3。add3(i)运行完后,i并不带回main中,所以i还是main中的i。
相同的还有String,很容易出错的.
public class Test {
public static int add3(Integer i){
int val=i.intValue();
val+=3;
i= new Integer(val);
return i;
}
public static void main(String args[]){
Integer i= new Integer(0);
System.out.println(add3(i));
}
}