当前位置: 技术问答>java相关
104题中18题(类似)
来源: 互联网 发布时间:2015-06-20
本文导语: public class Test{ public static void change(String s){ s+="new add"; } public static void main(String arg[]){ String str = "old string"; System.out.prinln(str); change(str); System.out.prinln(str); } } --------------------------...
public class Test{
public static void change(String s){
s+="new add";
}
public static void main(String arg[]){
String str = "old string";
System.out.prinln(str);
change(str);
System.out.prinln(str);
}
}
---------------------------------------------
Java中的所有自变量或参数传递都是通过传递句柄进行的(reference from Think in java)当然除了基本类型
应该输出
old string
old string new add
可去依然是
old string
old string
------------------------why
如果换成类中成员变量,以class.string的方式要运行上面的change
可以输出想要的
old string
old string new add
------------------------why
method里的local variables和class field(成员变量),传递变量方式不一样???
public static void change(String s){
s+="new add";
}
public static void main(String arg[]){
String str = "old string";
System.out.prinln(str);
change(str);
System.out.prinln(str);
}
}
---------------------------------------------
Java中的所有自变量或参数传递都是通过传递句柄进行的(reference from Think in java)当然除了基本类型
应该输出
old string
old string new add
可去依然是
old string
old string
------------------------why
如果换成类中成员变量,以class.string的方式要运行上面的change
可以输出想要的
old string
old string new add
------------------------why
method里的local variables和class field(成员变量),传递变量方式不一样???
|
String 对象传引用,
但String 对象很特殊!很容易让人感觉他是传值方式!
这要从String对象的结构来分析!
String对象是一种不可改变的对象!当改变String内容时,将导致
String 重新分配内存空间,所以如果你在过程中改变了传入的String
的内容的话,将生成一个新的String对象,传入的引用也就不指向过程
外的String对象了!
如果要巴String传回去,就用return或StringBuffer吧!
这就是为什么在经常改变字窜内容时 推荐用StringBuffer的原因!
但String 对象很特殊!很容易让人感觉他是传值方式!
这要从String对象的结构来分析!
String对象是一种不可改变的对象!当改变String内容时,将导致
String 重新分配内存空间,所以如果你在过程中改变了传入的String
的内容的话,将生成一个新的String对象,传入的引用也就不指向过程
外的String对象了!
如果要巴String传回去,就用return或StringBuffer吧!
这就是为什么在经常改变字窜内容时 推荐用StringBuffer的原因!
|
你的程序里传递的只是str的一个拷贝,因为str是在主函数里声明的,它的作用范围仅限于主函数,但是这个变量要是声明成类成员变量就不同了,他的作用范围是整个类。
|
没有问题啊。
change(str); 是传的值呀。str 当然不会变。
如果你是这样,
change( Object o ) . 那 o 本身也不会变但是 o 中的变量可以变。
Class Object {
int i=0;
}
change( Object o){
o.i=99;
o=new Object();
}
然后你能看到什么呢?
o.i=99 ;
o 没有变。
change(str); 是传的值呀。str 当然不会变。
如果你是这样,
change( Object o ) . 那 o 本身也不会变但是 o 中的变量可以变。
Class Object {
int i=0;
}
change( Object o){
o.i=99;
o=new Object();
}
然后你能看到什么呢?
o.i=99 ;
o 没有变。
|
i agree with sinboy
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。