java中方法调用参数的值不能改变吗?
java中方法参数不都是引用吗,可是我却不能改变参数如:
String s1="aaa"
change(s1)
public boolean change(String sss)
{
sss="changed";
return true;
}
调用完扣s1还是aaa,而不是="changed";,why?
问题点数:40、回复次数:13Top
1 楼zhaolizu(一族)回复于 2002-10-30 11:45:22 得分 0
当然不对,这和fortran不一样的,要实现你的功能的代码如下:
String s1="aaa"
sl=change(s1)
public String change(String sss)
{
ssssssChange="changed";//这里不能用sss,不能将其改变!
return sssChange;//注意返回值类型
}
Top
2 楼wzxypq(wzxypq)回复于 2002-10-30 11:59:48 得分 0
可是如果参数类型是hashtable,传入和传出就可以改变,
“引用参数不都是可以变的吗Top
3 楼myjirong(扬帆)回复于 2002-10-30 12:22:46 得分 0
java中方法参数不都是引用,减单变量不是如int
类String不是减单变量,但比较不一样,有"值考贝"一说.Top
4 楼BlueChina(Returner)回复于 2002-10-30 12:41:48 得分 0
如果是对象的话,你就可以;Top
5 楼wzxypq(wzxypq)回复于 2002-10-30 13:15:30 得分 0
Integer是减单变量吗?Top
6 楼tommorrow()回复于 2002-10-30 13:38:13 得分 0
java中参数是按照值传递的直接两传递的是实际的值,实例和数组传递的是内存地址。你的程序实际等同于
String s1="aaa"
change(s1)
public boolean change(String sss)
{
sss=s1
sss="changed";
return true;
}
Top
7 楼tommorrow()回复于 2002-10-30 13:46:09 得分 0
Integer不是减单变量Top
8 楼dongdong205(东东)回复于 2002-10-30 13:47:02 得分 0
同意楼上的!!!Top
9 楼yemagxy(把酒言欢)回复于 2002-10-30 14:18:14 得分 40
s1和sss都是句柄,在把s1作为实参传给change时,只是令s1和sss都指向同一个对象,而sss="changed";只是改变了sss句柄指向的对象,s1并未发生任何变化。这里的s1、sss和c++里的引用并不一样,c++中的引用被初始化指向一个对象后就不能再指向其他对象,而java中的句柄却可以。讲多了,你只要记住,虽然s1和sss可能指向同一个对象,但如果其中一个指向了其他对象(重新赋值),它们就没了任何联系。Top
10 楼yemagxy(把酒言欢)回复于 2002-10-30 14:25:05 得分 0
你可以这样改变实参指向对象的值(成立的理由就是y和x指向同一个值)
class Letter {
char c;
}
public class PassObject {
static void f(Letter y) {
y.c = 'z';
}
public static void main(String[] args) {
Letter x = new Letter();
x.c = 'a';
System.out.println("1: x.c: " + x.c);
f(x);//注意这里,已经改变了x指向的对象的值
System.out.println("2: x.c: " + x.c);
}
} ///:~
上边是《think in java》中的例子Top
11 楼Anubis12345(东大d徒然草:自由,java,我喜欢.)回复于 2002-10-30 21:28:28 得分 0
下面这个例子可以:
class af
{
static String[] f=new String[1];
public static void main(String[] args)
{
f[0]="adff";
change(f);
System.out.println(f[0]);
}
static void change(String[] s)
{
s[0]="Changed";
}
}Top
12 楼dy18(黎明之目)回复于 2002-10-30 22:01:42 得分 0
同意楼上的!!!
Top
13 楼wzxypq(wzxypq)回复于 2002-10-31 13:15:13 得分 0
那想得到一个返回值好麻烦啊,有什么简单的方法,不能return,因为要返回几个值Top




