嗯,建义你查找了一下那些"传值","传址"的文章。
class B{
B(){b=10}
int b;
}foo(int a,B b)
{
a=10;//这里面的改变对外没作用
b.b=20; //这个改变有效
b=new B(); //这个改变同样没有作用
}
class B{
B(){b=10}
int b;
}foo(int a,B b)
{
a=10;//这里面的改变对外没作用
b.b=20; //这个改变有效
b=new B(); //这个改变同样没有作用
}
简单的对象和简单类型都是值传递,如String,Integer,int,boolean...
所以如果java中函数的参数是复杂的对象类型是可以带回值的,不过这种方法在java中不建议使用。
b.b=20; //这个改变有效吗? int x;
B y;
foo(x,y);
这是y.b是20吗?我还是自己写段代码试试
非String,Integer,int,boolean之类的复杂对象
{
public static void main(String args[])
{
int val;
StringBuffer sb1, sb2; val = 10;
sb1 = new StringBuffer("apples");
sb2 = new StringBuffer("pears");
System.out.println("val is " + val);
System.out.println("sb1 is " + sb1);
System.out.println("sb2 is " + sb2);
System.out.println(""); System.out.println("calling modify");
//按值传递所有参数
modify(val, sb1, sb2);
System.out.println("returned from modify");
System.out.println(""); System.out.println("val is " + val);
System.out.println("sb1 is " + sb1);
System.out.println("sb2 is " + sb2);
} public static void modify(int a, StringBuffer r1,
StringBuffer r2)
{
System.out.println("in modify...");
a = 0;
r1 = null; //1
r2.append(" taste good");
System.out.println("a is " + a);
System.out.println("r1 is " + r1);
System.out.println("r2 is " + r2);
}
}
eiawd(天地男儿) :
的说法!java中很多概念和c/c++的一些概念类似有不完全相同的!
因为java本身是通过传值来实现的(与c相似的),所以在函数中的操作不会影响参数的使用。
例如在函数
public static void modify(int a, StringBuffer r1,
StringBuffer r2)
{
System.out.println("in modify...");
a = 0;
r1 = null;
/////////////////////////////////////
r1=new StringBuffer("is not null");
////////////////////////////////////////////// r2.append(" taste good");
System.out.println("a is " + a);
System.out.println("r1 is " + r1);
System.out.println("r2 is " + r2);
}
}
可以看出依然没有修改r1的值,
为什么r2的值发生变化,是因为r1,r2传送的都是地址,函数modify对r2所指的内容进行了添加,虽然r2本身没变,但是其指向的内容改变了。