a,b are local vars inside temp(String a,String b), so change references of them will not change vars outside temp().
解决方案 »
- 新手求教冒泡排序。
- JInternalFrame里如何调用JPanel
- 如何得到一年的起始和结束时间??
- 在Socket网络程序中,多个命令间如何区分
- 请问:为什么我这个SMTP邮件格式是纯文本呢?
- 『求助』请教java读取pdf文件(pdfbox,xpdf)
- 求一个模拟100台机器同时访问数据库的程序!
- 操作string array时发生IndexOutOfBoundsException,如何解决?
- 用Jbuilder6编译运行工程文件时出现Error #: 914 : unable to write to output directory怎么办?
- scjp----是否有同感?
- 参与就有分$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$(100分)
- 我是新手,请高手帮忙解决这个问题.
画什么图?画UML图吗?
to wobelisk():
What's the different between local vars and vars in temp()?And I change the entities of the references,not the references in temp.
基本类型是传值;有值拷贝。
其它是都是传引用(可以看做是传地址了!),当然要有引用的拷贝了。
传引用的问题就不用再提了,是肯定的。关键在于Java的内存模型。粗略地说,对于temp方法的两个参数,系统会在堆栈中为之建立相应的拷贝,本地句柄。这时每个对象有两个引用,外部句柄与本地句柄。而temp方法中调换的是本地句柄对两个对象的引用,并不影响外部句柄对两个对象的引用。
假设Main()中 a,b 分别被 aa,bb所代替。
当aa,bb的对象引用通过temp(aa,bb)后,temp函数内的变量:a 和aa有相同的引用,b和bb有相同的引用,此时,a和b的引用互换了,但aa和bb的并没有发生变化。
也就是说,public static void temp(String a,String b) 函数中的a,b 是重新定义的两个变量。而不在是main中的 a和b。
所以,你定义如此之方法是不能实现两个变量的内容交换的,如果一定要实现交换,可以用数组: private static void swap(short x[], int a, int b) {
short t = x[a];
x[a] = x[b];
x[b] = t;
}
另外:java对象通过方法(函数)的参数传入,在方法内对其状态的改变是可以传回到调用出的!所以你在方法(函数)内对对象进行属性修改之类的操作是有效的!
如何修改指向的内容?
---------------------------------------------------------------------------------
to Shrewdcat(丧邦&灵猫&潇):
“也就是说,public static void temp(String a,String b) 函数中的a,b 是重新定义的两个变量。而不在是main中的 a和b。”但是他们的指向都是相同的对象,temp()中的a和main()中的a都指向heap中的"Hello"啊。
String str1 = new String("A");和String str1="A";有什么区别,都是初始化啊!
1. 传引用不是可有可无的称谓,实际上我觉得它很形象。
2. 状态的改变并不是传回去的,而是两个句柄对同一个对象进行引用,任何一个句柄都可以调用其可以改变对象状态的方法。观察对象状态的改变也是同样的。正如caiyi0903(willpower) 所说,一个内存模型图就可以解释。
可以在Java2从入门到精通或Java2编程详解中找到这个模型图,前年看的,到底是哪一本记不清了。lxw1983 (oner) 可以参考一下。