呵呵,有意思我只能说你多看看书吧了解String在java 中的存储形式先
解决方案 »
- 关于多线程 执行顺序
- SWT 多级列表问题请教!
- javaapi有没有办法获得connection或datasource的密码?紧急求援!
- 麻烦大家帮我看看,这个代码哪有错误!多谢了!
- JScrollPane到底是怎么实现自动滚屏的??
- 请问用editplus如何打开用日文EUC-JP编码的js文件?
- (omni)Corba的tcpSocketMT Worker thread异常,请用过omniORB的大大帮帮忙啊?
- 我上传一个word文档,怎么在ie里面把他打开?
- 哪里有《21天学Java》电子版图书,100分送上
- ios的ZSSRichTextEditor-master。。android版本谁移植个嘛
- 谁有《网站开发计划书范例》E一份给我好吗?
- toString()方法有什么用?
copy,这个方法之改变了strTest的值。而String有个特殊的地方就是:
一旦,refernce所指向的String的值发生改变,JVM会在内存里面生成另外一个String object。
所以你程序运行的结果就是这样了。你可以让这个method改为返回一个String,然后在赋给str,这样就可以改变的str的值了。
import java.util.*;
public class SideEffect
{
public static void fnSideEffect(HashMap hm)
{
hm.put("one","this is one");
hm.put("two","this is two");
}
public static void main(String[] args)
{
HashMap myHm=new HashMap();
myHm.put("one","this is one,inside main()");
myHm.put("two","this is two,inside main()"); System.out.println(myHm.get("one"));//输出one","this is one,inside main()
System.out.println(myHm.get("two"));//输出two","this is two,inside main() fnSideEffect(myHm); System.out.println(myHm.get("one"));//输出one","this is one
System.out.println(myHm.get("two"));//输出two","this is two
}
}
你在main()里面用fnSideEffect(myHm)之后,就把myHm里面其中的两个Key对于的value替换掉了,输出结果就变成替换后的结果。
如果你能明白调用method时候的copy reference的道理和String Object的特殊性,我想上面的结果不应该出乎意料的。那,
你的问题是什么呢?
我是从C/C++转过来的,java的传递实在搞不懂,烦请各位。
一旦某个reference(pointer)指向的String Object的值改变的话,内存中会生成另外一个等于改变后的值的String Object供原先的reference调用:
String a = "ABC";
a = "BCD";
运行之后,a 是指向"BCD"这个新生成的Object了。